refinerycms-i18n 1.0.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (289) hide show
  1. data/Gemfile +63 -0
  2. data/Rakefile +14 -29
  3. data/{public → app/assets}/images/refinery/icons/flags/ad.png +0 -0
  4. data/{public → app/assets}/images/refinery/icons/flags/ae.png +0 -0
  5. data/{public → app/assets}/images/refinery/icons/flags/af.png +0 -0
  6. data/{public → app/assets}/images/refinery/icons/flags/ag.png +0 -0
  7. data/{public → app/assets}/images/refinery/icons/flags/ai.png +0 -0
  8. data/{public → app/assets}/images/refinery/icons/flags/al.png +0 -0
  9. data/{public → app/assets}/images/refinery/icons/flags/am.png +0 -0
  10. data/{public → app/assets}/images/refinery/icons/flags/an.png +0 -0
  11. data/{public → app/assets}/images/refinery/icons/flags/ao.png +0 -0
  12. data/{public → app/assets}/images/refinery/icons/flags/ar.png +0 -0
  13. data/{public → app/assets}/images/refinery/icons/flags/as.png +0 -0
  14. data/{public → app/assets}/images/refinery/icons/flags/at.png +0 -0
  15. data/{public → app/assets}/images/refinery/icons/flags/au.png +0 -0
  16. data/{public → app/assets}/images/refinery/icons/flags/aw.png +0 -0
  17. data/{public → app/assets}/images/refinery/icons/flags/ax.png +0 -0
  18. data/{public → app/assets}/images/refinery/icons/flags/az.png +0 -0
  19. data/{public → app/assets}/images/refinery/icons/flags/ba.png +0 -0
  20. data/{public → app/assets}/images/refinery/icons/flags/bb.png +0 -0
  21. data/{public → app/assets}/images/refinery/icons/flags/bd.png +0 -0
  22. data/{public → app/assets}/images/refinery/icons/flags/be.png +0 -0
  23. data/{public → app/assets}/images/refinery/icons/flags/bf.png +0 -0
  24. data/{public → app/assets}/images/refinery/icons/flags/bg.png +0 -0
  25. data/{public → app/assets}/images/refinery/icons/flags/bh.png +0 -0
  26. data/{public → app/assets}/images/refinery/icons/flags/bi.png +0 -0
  27. data/{public → app/assets}/images/refinery/icons/flags/bj.png +0 -0
  28. data/{public → app/assets}/images/refinery/icons/flags/bm.png +0 -0
  29. data/{public → app/assets}/images/refinery/icons/flags/bn.png +0 -0
  30. data/{public → app/assets}/images/refinery/icons/flags/bo.png +0 -0
  31. data/{public → app/assets}/images/refinery/icons/flags/bs.png +0 -0
  32. data/{public → app/assets}/images/refinery/icons/flags/bt.png +0 -0
  33. data/{public → app/assets}/images/refinery/icons/flags/bv.png +0 -0
  34. data/{public → app/assets}/images/refinery/icons/flags/bw.png +0 -0
  35. data/{public → app/assets}/images/refinery/icons/flags/by.png +0 -0
  36. data/{public → app/assets}/images/refinery/icons/flags/bz.png +0 -0
  37. data/{public → app/assets}/images/refinery/icons/flags/ca.png +0 -0
  38. data/{public → app/assets}/images/refinery/icons/flags/catalonia.png +0 -0
  39. data/{public → app/assets}/images/refinery/icons/flags/cc.png +0 -0
  40. data/{public → app/assets}/images/refinery/icons/flags/cd.png +0 -0
  41. data/{public → app/assets}/images/refinery/icons/flags/cf.png +0 -0
  42. data/{public → app/assets}/images/refinery/icons/flags/cg.png +0 -0
  43. data/{public → app/assets}/images/refinery/icons/flags/ch.png +0 -0
  44. data/{public → app/assets}/images/refinery/icons/flags/ci.png +0 -0
  45. data/{public → app/assets}/images/refinery/icons/flags/ck.png +0 -0
  46. data/{public → app/assets}/images/refinery/icons/flags/cl.png +0 -0
  47. data/{public → app/assets}/images/refinery/icons/flags/cm.png +0 -0
  48. data/{public → app/assets}/images/refinery/icons/flags/cn.png +0 -0
  49. data/{public → app/assets}/images/refinery/icons/flags/co.png +0 -0
  50. data/{public → app/assets}/images/refinery/icons/flags/cr.png +0 -0
  51. data/{public → app/assets}/images/refinery/icons/flags/cs.png +0 -0
  52. data/{public → app/assets}/images/refinery/icons/flags/cu.png +0 -0
  53. data/{public → app/assets}/images/refinery/icons/flags/cv.png +0 -0
  54. data/{public → app/assets}/images/refinery/icons/flags/cx.png +0 -0
  55. data/{public → app/assets}/images/refinery/icons/flags/cy.png +0 -0
  56. data/{public → app/assets}/images/refinery/icons/flags/da.png +0 -0
  57. data/{public → app/assets}/images/refinery/icons/flags/de.png +0 -0
  58. data/{public → app/assets}/images/refinery/icons/flags/dj.png +0 -0
  59. data/{public → app/assets}/images/refinery/icons/flags/dm.png +0 -0
  60. data/{public → app/assets}/images/refinery/icons/flags/do.png +0 -0
  61. data/{public → app/assets}/images/refinery/icons/flags/dz.png +0 -0
  62. data/{public → app/assets}/images/refinery/icons/flags/ec.png +0 -0
  63. data/{public → app/assets}/images/refinery/icons/flags/eg.png +0 -0
  64. data/{public → app/assets}/images/refinery/icons/flags/eh.png +0 -0
  65. data/{public → app/assets}/images/refinery/icons/flags/el.png +0 -0
  66. data/{public/images/refinery/icons/flags/gb.png → app/assets/images/refinery/icons/flags/en.png} +0 -0
  67. data/{public → app/assets}/images/refinery/icons/flags/england.png +0 -0
  68. data/{public → app/assets}/images/refinery/icons/flags/er.png +0 -0
  69. data/{public → app/assets}/images/refinery/icons/flags/es.png +0 -0
  70. data/{public/images/refinery/icons/flags/ee.png → app/assets/images/refinery/icons/flags/et.png} +0 -0
  71. data/{public → app/assets}/images/refinery/icons/flags/europeanunion.png +0 -0
  72. data/{public → app/assets}/images/refinery/icons/flags/fam.png +0 -0
  73. data/{public → app/assets}/images/refinery/icons/flags/fi.png +0 -0
  74. data/{public → app/assets}/images/refinery/icons/flags/fj.png +0 -0
  75. data/{public → app/assets}/images/refinery/icons/flags/fk.png +0 -0
  76. data/{public → app/assets}/images/refinery/icons/flags/fm.png +0 -0
  77. data/{public → app/assets}/images/refinery/icons/flags/fo.png +0 -0
  78. data/{public → app/assets}/images/refinery/icons/flags/fr.png +0 -0
  79. data/{public → app/assets}/images/refinery/icons/flags/ga.png +0 -0
  80. data/{public → app/assets}/images/refinery/icons/flags/gd.png +0 -0
  81. data/{public → app/assets}/images/refinery/icons/flags/ge.png +0 -0
  82. data/{public → app/assets}/images/refinery/icons/flags/gf.png +0 -0
  83. data/{public → app/assets}/images/refinery/icons/flags/gh.png +0 -0
  84. data/{public → app/assets}/images/refinery/icons/flags/gi.png +0 -0
  85. data/{public → app/assets}/images/refinery/icons/flags/gl.png +0 -0
  86. data/{public → app/assets}/images/refinery/icons/flags/gm.png +0 -0
  87. data/{public → app/assets}/images/refinery/icons/flags/gn.png +0 -0
  88. data/{public → app/assets}/images/refinery/icons/flags/gp.png +0 -0
  89. data/{public → app/assets}/images/refinery/icons/flags/gq.png +0 -0
  90. data/{public → app/assets}/images/refinery/icons/flags/gr.png +0 -0
  91. data/{public → app/assets}/images/refinery/icons/flags/gs.png +0 -0
  92. data/{public → app/assets}/images/refinery/icons/flags/gt.png +0 -0
  93. data/{public → app/assets}/images/refinery/icons/flags/gu.png +0 -0
  94. data/{public → app/assets}/images/refinery/icons/flags/gw.png +0 -0
  95. data/{public → app/assets}/images/refinery/icons/flags/gy.png +0 -0
  96. data/{public → app/assets}/images/refinery/icons/flags/hk.png +0 -0
  97. data/{public → app/assets}/images/refinery/icons/flags/hm.png +0 -0
  98. data/{public → app/assets}/images/refinery/icons/flags/hn.png +0 -0
  99. data/{public → app/assets}/images/refinery/icons/flags/hr.png +0 -0
  100. data/{public → app/assets}/images/refinery/icons/flags/ht.png +0 -0
  101. data/{public → app/assets}/images/refinery/icons/flags/hu.png +0 -0
  102. data/{public → app/assets}/images/refinery/icons/flags/id.png +0 -0
  103. data/{public → app/assets}/images/refinery/icons/flags/ie.png +0 -0
  104. data/{public → app/assets}/images/refinery/icons/flags/il.png +0 -0
  105. data/{public → app/assets}/images/refinery/icons/flags/in.png +0 -0
  106. data/{public → app/assets}/images/refinery/icons/flags/io.png +0 -0
  107. data/{public → app/assets}/images/refinery/icons/flags/iq.png +0 -0
  108. data/{public → app/assets}/images/refinery/icons/flags/ir.png +0 -0
  109. data/{public → app/assets}/images/refinery/icons/flags/is.png +0 -0
  110. data/{public → app/assets}/images/refinery/icons/flags/it.png +0 -0
  111. data/{public/images/refinery/icons/flags/jp.png → app/assets/images/refinery/icons/flags/ja.png} +0 -0
  112. data/{public → app/assets}/images/refinery/icons/flags/jm.png +0 -0
  113. data/{public → app/assets}/images/refinery/icons/flags/jo.png +0 -0
  114. data/{public → app/assets}/images/refinery/icons/flags/ke.png +0 -0
  115. data/{public → app/assets}/images/refinery/icons/flags/kg.png +0 -0
  116. data/{public → app/assets}/images/refinery/icons/flags/kh.png +0 -0
  117. data/{public → app/assets}/images/refinery/icons/flags/ki.png +0 -0
  118. data/{public → app/assets}/images/refinery/icons/flags/km.png +0 -0
  119. data/{public → app/assets}/images/refinery/icons/flags/kn.png +0 -0
  120. data/{public → app/assets}/images/refinery/icons/flags/kp.png +0 -0
  121. data/{public → app/assets}/images/refinery/icons/flags/kr.png +0 -0
  122. data/{public → app/assets}/images/refinery/icons/flags/kw.png +0 -0
  123. data/{public → app/assets}/images/refinery/icons/flags/ky.png +0 -0
  124. data/{public → app/assets}/images/refinery/icons/flags/kz.png +0 -0
  125. data/{public → app/assets}/images/refinery/icons/flags/la.png +0 -0
  126. data/{public → app/assets}/images/refinery/icons/flags/lb.png +0 -0
  127. data/{public → app/assets}/images/refinery/icons/flags/lc.png +0 -0
  128. data/{public → app/assets}/images/refinery/icons/flags/li.png +0 -0
  129. data/{public → app/assets}/images/refinery/icons/flags/lk.png +0 -0
  130. data/{public → app/assets}/images/refinery/icons/flags/lr.png +0 -0
  131. data/{public → app/assets}/images/refinery/icons/flags/ls.png +0 -0
  132. data/{public → app/assets}/images/refinery/icons/flags/lt.png +0 -0
  133. data/{public → app/assets}/images/refinery/icons/flags/lu.png +0 -0
  134. data/{public → app/assets}/images/refinery/icons/flags/lv.png +0 -0
  135. data/{public → app/assets}/images/refinery/icons/flags/ly.png +0 -0
  136. data/{public → app/assets}/images/refinery/icons/flags/ma.png +0 -0
  137. data/{public → app/assets}/images/refinery/icons/flags/mc.png +0 -0
  138. data/{public → app/assets}/images/refinery/icons/flags/md.png +0 -0
  139. data/{public → app/assets}/images/refinery/icons/flags/me.png +0 -0
  140. data/{public → app/assets}/images/refinery/icons/flags/mg.png +0 -0
  141. data/{public → app/assets}/images/refinery/icons/flags/mh.png +0 -0
  142. data/{public → app/assets}/images/refinery/icons/flags/mk.png +0 -0
  143. data/{public → app/assets}/images/refinery/icons/flags/ml.png +0 -0
  144. data/{public → app/assets}/images/refinery/icons/flags/mm.png +0 -0
  145. data/{public → app/assets}/images/refinery/icons/flags/mn.png +0 -0
  146. data/{public → app/assets}/images/refinery/icons/flags/mo.png +0 -0
  147. data/{public → app/assets}/images/refinery/icons/flags/mp.png +0 -0
  148. data/{public → app/assets}/images/refinery/icons/flags/mq.png +0 -0
  149. data/{public → app/assets}/images/refinery/icons/flags/mr.png +0 -0
  150. data/{public → app/assets}/images/refinery/icons/flags/ms.png +0 -0
  151. data/{public → app/assets}/images/refinery/icons/flags/mt.png +0 -0
  152. data/{public → app/assets}/images/refinery/icons/flags/mu.png +0 -0
  153. data/{public → app/assets}/images/refinery/icons/flags/mv.png +0 -0
  154. data/{public → app/assets}/images/refinery/icons/flags/mw.png +0 -0
  155. data/{public → app/assets}/images/refinery/icons/flags/mx.png +0 -0
  156. data/{public → app/assets}/images/refinery/icons/flags/my.png +0 -0
  157. data/{public → app/assets}/images/refinery/icons/flags/mz.png +0 -0
  158. data/{public → app/assets}/images/refinery/icons/flags/na.png +0 -0
  159. data/{public → app/assets}/images/refinery/icons/flags/nb.png +0 -0
  160. data/{public → app/assets}/images/refinery/icons/flags/nc.png +0 -0
  161. data/{public → app/assets}/images/refinery/icons/flags/ne.png +0 -0
  162. data/{public → app/assets}/images/refinery/icons/flags/nf.png +0 -0
  163. data/{public → app/assets}/images/refinery/icons/flags/ng.png +0 -0
  164. data/{public → app/assets}/images/refinery/icons/flags/ni.png +0 -0
  165. data/{public → app/assets}/images/refinery/icons/flags/nl.png +0 -0
  166. data/{public → app/assets}/images/refinery/icons/flags/nn.png +0 -0
  167. data/{public → app/assets}/images/refinery/icons/flags/np.png +0 -0
  168. data/{public → app/assets}/images/refinery/icons/flags/nr.png +0 -0
  169. data/{public → app/assets}/images/refinery/icons/flags/nu.png +0 -0
  170. data/{public → app/assets}/images/refinery/icons/flags/nz.png +0 -0
  171. data/{public → app/assets}/images/refinery/icons/flags/om.png +0 -0
  172. data/{public → app/assets}/images/refinery/icons/flags/pa.png +0 -0
  173. data/{public → app/assets}/images/refinery/icons/flags/pe.png +0 -0
  174. data/{public → app/assets}/images/refinery/icons/flags/pf.png +0 -0
  175. data/{public → app/assets}/images/refinery/icons/flags/pg.png +0 -0
  176. data/{public → app/assets}/images/refinery/icons/flags/ph.png +0 -0
  177. data/{public → app/assets}/images/refinery/icons/flags/pk.png +0 -0
  178. data/{public → app/assets}/images/refinery/icons/flags/pl.png +0 -0
  179. data/{public → app/assets}/images/refinery/icons/flags/pm.png +0 -0
  180. data/{public → app/assets}/images/refinery/icons/flags/pn.png +0 -0
  181. data/{public → app/assets}/images/refinery/icons/flags/pr.png +0 -0
  182. data/{public → app/assets}/images/refinery/icons/flags/ps.png +0 -0
  183. data/{public → app/assets}/images/refinery/icons/flags/pt-BR.png +0 -0
  184. data/{public → app/assets}/images/refinery/icons/flags/pt.png +0 -0
  185. data/{public → app/assets}/images/refinery/icons/flags/pw.png +0 -0
  186. data/{public → app/assets}/images/refinery/icons/flags/py.png +0 -0
  187. data/{public → app/assets}/images/refinery/icons/flags/qa.png +0 -0
  188. data/{public → app/assets}/images/refinery/icons/flags/re.png +0 -0
  189. data/{public → app/assets}/images/refinery/icons/flags/ro.png +0 -0
  190. data/{public → app/assets}/images/refinery/icons/flags/rs.png +0 -0
  191. data/{public → app/assets}/images/refinery/icons/flags/ru.png +0 -0
  192. data/{public → app/assets}/images/refinery/icons/flags/rw.png +0 -0
  193. data/{public → app/assets}/images/refinery/icons/flags/sa.png +0 -0
  194. data/{public → app/assets}/images/refinery/icons/flags/sb.png +0 -0
  195. data/{public → app/assets}/images/refinery/icons/flags/sc.png +0 -0
  196. data/{public → app/assets}/images/refinery/icons/flags/scotland.png +0 -0
  197. data/{public → app/assets}/images/refinery/icons/flags/sd.png +0 -0
  198. data/{public → app/assets}/images/refinery/icons/flags/sg.png +0 -0
  199. data/{public → app/assets}/images/refinery/icons/flags/sh.png +0 -0
  200. data/{public → app/assets}/images/refinery/icons/flags/si.png +0 -0
  201. data/{public → app/assets}/images/refinery/icons/flags/sj.png +0 -0
  202. data/{public → app/assets}/images/refinery/icons/flags/sk.png +0 -0
  203. data/{public → app/assets}/images/refinery/icons/flags/sl.png +0 -0
  204. data/{public → app/assets}/images/refinery/icons/flags/sm.png +0 -0
  205. data/{public → app/assets}/images/refinery/icons/flags/sn.png +0 -0
  206. data/{public → app/assets}/images/refinery/icons/flags/so.png +0 -0
  207. data/{public → app/assets}/images/refinery/icons/flags/sr.png +0 -0
  208. data/{public → app/assets}/images/refinery/icons/flags/st.png +0 -0
  209. data/{public/images/refinery/icons/flags/se.png → app/assets/images/refinery/icons/flags/sv.png} +0 -0
  210. data/{public → app/assets}/images/refinery/icons/flags/sy.png +0 -0
  211. data/{public → app/assets}/images/refinery/icons/flags/sz.png +0 -0
  212. data/{public → app/assets}/images/refinery/icons/flags/tc.png +0 -0
  213. data/{public → app/assets}/images/refinery/icons/flags/td.png +0 -0
  214. data/{public → app/assets}/images/refinery/icons/flags/tf.png +0 -0
  215. data/{public → app/assets}/images/refinery/icons/flags/tg.png +0 -0
  216. data/{public → app/assets}/images/refinery/icons/flags/th.png +0 -0
  217. data/{public → app/assets}/images/refinery/icons/flags/tj.png +0 -0
  218. data/{public → app/assets}/images/refinery/icons/flags/tk.png +0 -0
  219. data/{public → app/assets}/images/refinery/icons/flags/tl.png +0 -0
  220. data/{public → app/assets}/images/refinery/icons/flags/tm.png +0 -0
  221. data/{public → app/assets}/images/refinery/icons/flags/tn.png +0 -0
  222. data/{public → app/assets}/images/refinery/icons/flags/to.png +0 -0
  223. data/{public → app/assets}/images/refinery/icons/flags/tr.png +0 -0
  224. data/{public → app/assets}/images/refinery/icons/flags/tt.png +0 -0
  225. data/{public → app/assets}/images/refinery/icons/flags/tv.png +0 -0
  226. data/{public → app/assets}/images/refinery/icons/flags/tw.png +0 -0
  227. data/{public → app/assets}/images/refinery/icons/flags/tz.png +0 -0
  228. data/{public → app/assets}/images/refinery/icons/flags/ua.png +0 -0
  229. data/{public → app/assets}/images/refinery/icons/flags/ug.png +0 -0
  230. data/{public → app/assets}/images/refinery/icons/flags/um.png +0 -0
  231. data/{public → app/assets}/images/refinery/icons/flags/us.png +0 -0
  232. data/{public → app/assets}/images/refinery/icons/flags/uy.png +0 -0
  233. data/{public → app/assets}/images/refinery/icons/flags/uz.png +0 -0
  234. data/{public → app/assets}/images/refinery/icons/flags/va.png +0 -0
  235. data/{public → app/assets}/images/refinery/icons/flags/vc.png +0 -0
  236. data/{public → app/assets}/images/refinery/icons/flags/ve.png +0 -0
  237. data/{public → app/assets}/images/refinery/icons/flags/vg.png +0 -0
  238. data/{public → app/assets}/images/refinery/icons/flags/vi.png +0 -0
  239. data/{public → app/assets}/images/refinery/icons/flags/vn.png +0 -0
  240. data/{public → app/assets}/images/refinery/icons/flags/vu.png +0 -0
  241. data/{public → app/assets}/images/refinery/icons/flags/wales.png +0 -0
  242. data/{public → app/assets}/images/refinery/icons/flags/wf.png +0 -0
  243. data/{public → app/assets}/images/refinery/icons/flags/ws.png +0 -0
  244. data/{public → app/assets}/images/refinery/icons/flags/ye.png +0 -0
  245. data/{public → app/assets}/images/refinery/icons/flags/yt.png +0 -0
  246. data/{public → app/assets}/images/refinery/icons/flags/za.png +0 -0
  247. data/{public → app/assets}/images/refinery/icons/flags/zh-CN.png +0 -0
  248. data/{public → app/assets}/images/refinery/icons/flags/zh-TW.png +0 -0
  249. data/{public → app/assets}/images/refinery/icons/flags/zm.png +0 -0
  250. data/{public → app/assets}/images/refinery/icons/flags/zw.png +0 -0
  251. data/config/locales/bg.yml +102 -23
  252. data/config/locales/{jp.yml → ja.yml} +4 -1
  253. data/lib/gemspec.rb +5 -8
  254. data/lib/generators/refinery/i18n_generator.rb +10 -0
  255. data/lib/generators/refinery/templates/config/initializers/refinery/i18n.rb.erb +15 -0
  256. data/lib/refinery/i18n/configuration.rb +15 -0
  257. data/lib/refinery/i18n/engine.rb +80 -0
  258. data/lib/refinery/i18n-filter.rb +1 -3
  259. data/lib/refinery/i18n.rb +37 -191
  260. data/lib/refinerycms-i18n.rb +1 -1
  261. data/spec/requests/dashboard_locale_picker_spec.rb +32 -0
  262. data/spec/spec_helper.rb +56 -0
  263. data/tasks/rspec.rake +4 -0
  264. metadata +290 -286
  265. data/config/i18n-js.yml +0 -4
  266. data/features/dashboard.feature +0 -28
  267. data/i18n-js-readme.rdoc +0 -249
  268. data/lib/generators/refinerycms_i18n_generator.rb +0 -10
  269. data/lib/refinery/i18n-js/railtie.rb +0 -9
  270. data/lib/refinery/i18n-js/version.rb +0 -10
  271. data/lib/refinery/i18n-js.rb +0 -128
  272. data/lib/refinery/i18n-js.yml +0 -4
  273. data/lib/refinery/i18n.js +0 -339
  274. data/lib/tasks/i18n-js_tasks.rake +0 -16
  275. data/public/images/refinery/icons/flags/en.png +0 -0
  276. data/public/images/refinery/icons/flags/et.png +0 -0
  277. data/public/images/refinery/icons/flags/sv.png +0 -0
  278. data/test/i18n-test.html +0 -50
  279. data/test/i18n-test.js +0 -661
  280. data/test/i18n_js_test.rb +0 -168
  281. data/test/jsunittest/jsunittest.js +0 -1017
  282. data/test/jsunittest/unittest.css +0 -54
  283. data/test/resources/custom_path.yml +0 -4
  284. data/test/resources/default.yml +0 -4
  285. data/test/resources/locales.yml +0 -76
  286. data/test/resources/multiple_files.yml +0 -6
  287. data/test/resources/no_scope.yml +0 -3
  288. data/test/resources/simple_scope.yml +0 -4
  289. data/test/test_helper.rb +0 -24
data/lib/refinery/i18n.js DELETED
@@ -1,339 +0,0 @@
1
- // Instantiate the object
2
- var I18n = I18n || {};
3
-
4
- // Set default locale to english
5
- I18n.defaultLocale = "en";
6
-
7
- // Set current locale to null
8
- I18n.locale = null;
9
-
10
- I18n.lookup = function(scope, options) {
11
- var translations = this.prepareOptions(I18n.translations);
12
- var messages = translations[I18n.currentLocale()];
13
- options = this.prepareOptions(options);
14
-
15
- if (!messages) {
16
- return;
17
- }
18
-
19
- if (typeof(scope) == "object") {
20
- scope = scope.join(".");
21
- }
22
-
23
- if (options.scope) {
24
- scope = options.scope.toString() + "." + scope;
25
- }
26
-
27
- scope = scope.split(".");
28
-
29
- while (scope.length > 0) {
30
- var currentScope = scope.shift();
31
- messages = messages[currentScope];
32
-
33
- if (!messages) {
34
- break;
35
- }
36
- }
37
-
38
- if (!messages && options.defaultValue != null && options.defaultValue != undefined) {
39
- messages = options.defaultValue;
40
- }
41
-
42
- return messages;
43
- };
44
-
45
- // Merge serveral hash options, checking if value is set before
46
- // overwriting any value. The precedence is from left to right.
47
- //
48
- // I18n.prepareOptions({name: "John Doe"}, {name: "Mary Doe", role: "user"});
49
- // #=> {name: "John Doe", role: "user"}
50
- //
51
- I18n.prepareOptions = function() {
52
- var options = {};
53
- var opts;
54
- var count = arguments.length;
55
-
56
- for (var i = 0; i < count; i++) {
57
- opts = arguments[i];
58
-
59
- if (!opts) {
60
- continue;
61
- }
62
-
63
- for (var key in opts) {
64
- if (options[key] == undefined || options[key] == null) {
65
- options[key] = opts[key];
66
- }
67
- }
68
- }
69
-
70
- return options;
71
- };
72
-
73
- I18n.interpolate = function(message, options) {
74
- options = this.prepareOptions(options);
75
- var regex = /\{\{(.*?)\}\}/gm;
76
-
77
- var matches = message.match(regex);
78
-
79
- if (!matches) {
80
- return message;
81
- }
82
-
83
- var placeholder, value, name;
84
-
85
- for (var i = 0; placeholder = matches[i]; i++) {
86
- name = placeholder.replace(/\{\{(.*?)\}\}/gm, "$1");
87
-
88
- value = options[name];
89
-
90
- if (options[name] == null || options[name] == undefined) {
91
- value = "[missing " + placeholder + " value]";
92
- }
93
-
94
- regex = new RegExp(placeholder.replace(/\{/gm, "\\{").replace(/\}/gm, "\\}"));
95
-
96
- message = message.replace(regex, value);
97
- }
98
-
99
- return message;
100
- };
101
-
102
- I18n.translate = function(scope, options) {
103
- options = this.prepareOptions(options);
104
- var translation = this.lookup(scope, options);
105
-
106
- try {
107
- if (typeof(translation) == "object") {
108
- if (typeof(options.count) == "number") {
109
- return this.pluralize(options.count, scope, options);
110
- } else {
111
- return translation;
112
- }
113
- } else {
114
- return this.interpolate(translation, options);
115
- }
116
- } catch(err) {
117
- return this.missingTranslation(scope);
118
- }
119
- };
120
-
121
- I18n.localize = function(scope, value) {
122
- switch (scope) {
123
- case "currency":
124
- return this.toCurrency(value);
125
- case "number":
126
- scope = this.lookup("number.format");
127
- return this.toNumber(value, scope);
128
- case "percentage":
129
- return this.toPercentage(value);
130
- default:
131
- if (scope.match(/^(date|time)/)) {
132
- return this.toTime(scope, value);
133
- } else {
134
- return value.toString();
135
- }
136
- }
137
- };
138
-
139
- I18n.parseDate = function(d) {
140
- var matches, date;
141
-
142
- if (matches = d.toString().match(/(\d{4})-(\d{2})-(\d{2})(?:[ |T](\d{2}):(\d{2}):(\d{2}))?(Z)?/)) {
143
- // date/time strings: yyyy-mm-dd hh:mm:ss or yyyy-mm-dd or yyyy-mm-ddThh:mm:ssZ
144
- for (var i = 1; i <= 6; i++) {
145
- matches[i] = parseInt(matches[i], 10) || 0;
146
- }
147
-
148
- // month starts on 0
149
- matches[2] -= 1;
150
-
151
- if (matches[7]) {
152
- date = new Date(Date.UTC(matches[1], matches[2], matches[3], matches[4], matches[5], matches[6]));
153
- } else {
154
- date = new Date(matches[1], matches[2], matches[3], matches[4], matches[5], matches[6]);
155
- }
156
- } else if (typeof(d) == "number") {
157
- // UNIX timestamp
158
- date = new Date();
159
- date.setTime(d);
160
- } else {
161
- // an arbitrary javascript string
162
- date = new Date();
163
- date.setTime(Date.parse(d));
164
- }
165
-
166
- return date;
167
- };
168
-
169
- I18n.toTime = function(scope, d) {
170
- var date = this.parseDate(d);
171
- var format = this.lookup(scope);
172
-
173
- if (date.toString().match(/invalid/i)) {
174
- return date.toString();
175
- }
176
-
177
- if (!format) {
178
- return date.toString();
179
- }
180
-
181
- return this.strftime(date, format);
182
- };
183
-
184
- I18n.strftime = function(date, format) {
185
- var options = this.lookup("date");
186
-
187
- if (!options) {
188
- return date.toString();
189
- }
190
-
191
- var weekDay = date.getDay();
192
- var day = date.getDate();
193
- var year = date.getFullYear();
194
- var month = date.getMonth() + 1;
195
- var hour = date.getHours();
196
- var hour12 = hour;
197
- var meridian = hour > 12? "PM" : "AM";
198
- var secs = date.getSeconds();
199
- var mins = date.getMinutes();
200
- var offset = date.getTimezoneOffset();
201
- var absOffsetHours = Math.floor(Math.abs(offset / 60));
202
- var absOffsetMinutes = Math.abs(offset) - (absOffsetHours * 60);
203
- var timezoneoffset = (offset > 0 ? "-" : "+") + (absOffsetHours.toString().length < 2 ? "0" + absOffsetHours : absOffsetHours) + (absOffsetMinutes.toString().length < 2 ? "0" + absOffsetMinutes : absOffsetMinutes);
204
-
205
- if (hour12 > 12) {
206
- hour12 = hour12 - 12;
207
- }
208
-
209
- var padding = function(n) {
210
- var s = "0" + n.toString();
211
- return s.substr(s.length - 2);
212
- }
213
-
214
- var f = format;
215
- f = f.replace("%a", options["abbr_day_names"][weekDay]);
216
- f = f.replace("%A", options["day_names"][weekDay]);
217
- f = f.replace("%b", options["abbr_month_names"][month]);
218
- f = f.replace("%B", options["month_names"][month]);
219
- f = f.replace("%d", padding(day));
220
- f = f.replace("%-d", day);
221
- f = f.replace("%H", padding(hour));
222
- f = f.replace("%-H", hour);
223
- f = f.replace("%I", padding(hour12));
224
- f = f.replace("%-I", hour12);
225
- f = f.replace("%m", padding(month));
226
- f = f.replace("%-m", month);
227
- f = f.replace("%M", padding(mins));
228
- f = f.replace("%-M", mins);
229
- f = f.replace("%p", meridian);
230
- f = f.replace("%S", padding(secs));
231
- f = f.replace("%-S", secs);
232
- f = f.replace("%w", weekDay);
233
- f = f.replace("%y", padding(year));
234
- f = f.replace("%-y", padding(year).replace(/^0+/, ""));
235
- f = f.replace("%Y", year);
236
- f = f.replace("%z", timezoneoffset);
237
-
238
- return f;
239
- };
240
-
241
- I18n.toNumber = function(number, options) {
242
- options = this.prepareOptions(
243
- options,
244
- this.lookup("number.format"),
245
- {precision: 3, separator: ".", delimiter: ","}
246
- );
247
-
248
- var string = number.toFixed(options["precision"]).toString();
249
- var parts = string.split(".");
250
-
251
- number = parts[0];
252
- var precision = parts[1];
253
-
254
- var n = [];
255
-
256
- while (number.length > 0) {
257
- n.unshift(number.substr(Math.max(0, number.length - 3), 3));
258
- number = number.substr(0, number.length -3);
259
- }
260
-
261
- var formattedNumber = n.join(options["delimiter"]);
262
-
263
- if (options["precision"] > 0) {
264
- formattedNumber += options["separator"] + parts[1];
265
- }
266
-
267
- return formattedNumber;
268
- };
269
-
270
- I18n.toCurrency = function(number, options) {
271
- options = this.prepareOptions(
272
- options,
273
- this.lookup("number.currency.format"),
274
- this.lookup("number.format"),
275
- {unit: "$", precision: 2, format: "%u%n", delimiter: ",", separator: "."}
276
- );
277
-
278
- number = this.toNumber(number, options);
279
- number = options["format"]
280
- .replace("%u", options["unit"])
281
- .replace("%n", number);
282
-
283
- return number;
284
- };
285
-
286
- I18n.toPercentage = function(number, options) {
287
- options = this.prepareOptions(
288
- options,
289
- this.lookup("number.percentage.format"),
290
- this.lookup("number.format"),
291
- {precision: 3, separator: ".", delimiter: ""}
292
- );
293
-
294
- number = this.toNumber(number, options);
295
- return number + "%";
296
- };
297
-
298
- I18n.pluralize = function(count, scope, options) {
299
- var translation = this.lookup(scope, options);
300
-
301
- var message;
302
- options = this.prepareOptions(options);
303
- options["count"] = count.toString();
304
-
305
- switch(Math.abs(count)) {
306
- case 0:
307
- message = translation["zero"] || translation["none"] || translation["other"] || this.missingTranslation(scope, "zero");
308
- break;
309
- case 1:
310
- message = translation["one"] || this.missingTranslation(scope, "one");;
311
- break;
312
- default:
313
- message = translation["other"] || this.missingTranslation(scope, "other");;
314
- }
315
-
316
- return this.interpolate(message, options);
317
- };
318
-
319
- I18n.missingTranslation = function() {
320
- var message = '[missing "' + this.currentLocale();
321
- var count = arguments.length;
322
-
323
- for (var i = 0; i < count; i++) {
324
- message += "." + arguments[i];
325
- }
326
-
327
- message += '" translation]';
328
-
329
- return message;
330
- };
331
-
332
- I18n.currentLocale = function() {
333
- return (I18n.locale || I18n.defaultLocale);
334
- };
335
-
336
- // shortcuts
337
- I18n.t = I18n.translate;
338
- I18n.l = I18n.localize;
339
- I18n.p = I18n.pluralize;
@@ -1,16 +0,0 @@
1
- namespace :i18n do
2
- desc "Copy i18n.js and configuration file"
3
- task :setup => :environment do
4
- SimplesIdeias::I18n.setup!
5
- end
6
-
7
- desc "Export the messages files"
8
- task :export => :environment do
9
- SimplesIdeias::I18n.export!
10
- end
11
-
12
- desc "Update the JavaScript library"
13
- task :update => :environment do
14
- SimplesIdeias::I18n.update!
15
- end
16
- end
data/test/i18n-test.html DELETED
@@ -1,50 +0,0 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
- <head>
5
- <title>JavaScript unit test file</title>
6
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
7
- <script src="jsunittest/jsunittest.js" type="text/javascript"></script>
8
- <link rel="stylesheet" href="jsunittest/unittest.css" type="text/css" />
9
-
10
- <style type="text/css" media="screen">
11
- #logger p {
12
- background: #ffc;
13
- padding: 5px;
14
- }
15
- </style>
16
- <script type="text/javascript" charset="utf-8">
17
- function log(name, message) {
18
- var tag = document.getElementById("logger");
19
- message = message.toString();
20
- message = message.replace(/&/gm, "&amp;");
21
- message = message.replace(/</gm, "&lt;");
22
- message = message.replace(/>/gm, "&gt;");
23
- tag.innerHTML += "<p><strong>" + name + ":</strong> " + message + "</p>";
24
- }
25
- </script>
26
- <script src="../lib/i18n.js" type="text/javascript"></script>
27
- </head>
28
- <body>
29
-
30
- <div id="content">
31
- <div id="header">
32
- <h1>JavaScript unit test file</h1>
33
- <p>
34
- This file tests <strong>i18n.js</strong>.
35
- </p>
36
- </div>
37
-
38
- <!-- Log output (one per Runner, via {testLog: "testlog"} option)-->
39
- <div id="testlog"></div>
40
-
41
- <!-- General debugger -->
42
- <div id="logger"></div>
43
-
44
- <!-- Put sample/test html here -->
45
- <div id="sample">
46
- </div>
47
- </div>
48
- <script src="i18n-test.js" type="text/javascript" charset="utf-8"></script>
49
- </body>
50
- </html>