tr8n 3.0.5 → 3.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +17 -0
- data/.rvmrc +1 -0
- data/Gemfile +12 -6
- data/Gemfile.lock +143 -60
- data/MIT-LICENSE +20 -0
- data/Rakefile +39 -22
- data/{lib/tasks → app/assets/images/tr8n}/.gitkeep +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/accept.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/action_tab_bkgd.gif +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/action_tab_white_bkgd.gif +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/add.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/arrow_down.gif +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/arrow_down.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/arrow_down_grey.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/arrow_right.gif +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/arrow_up.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/arrow_up_grey.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/bullet_go.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/buttons.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/cancel.png +0 -0
- data/app/assets/images/tr8n/checkmark.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/close.gif +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/cross.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/delete.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/disk.png +0 -0
- data/app/assets/images/tr8n/error.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/examples/context_rules_1.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/examples/context_rules_2.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/examples/date_rules_1.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/examples/date_rules_2.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/examples/date_rules_3.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/examples/gender_rules_1.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/examples/gender_rules_2.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/examples/gender_rules_3.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/examples/language_manager_1.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/examples/list_rules_1.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/examples/list_rules_2.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/examples/list_rules_3.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/examples/numeric_rules_1.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/examples/numeric_rules_2.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/examples/numeric_rules_3.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/examples/numeric_rules_4.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/exclamation.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/eye.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/eye_not.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/facebook/connect_light_medium_long.gif +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/field_sprite.gif +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/find.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ab.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ach.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/af.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ak.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/am.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/an.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-AE.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-BH.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-DZ.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-EG.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-IQ.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-JO.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-KW.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-LB.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-LY.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-MA.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-OM.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-QA.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-SA.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-SY.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-TN.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar-YE.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ar.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/as.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ast.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ay.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/az.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ba.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/be.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/bg.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/bh.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/bn.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/bo.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/br.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/bs.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ca.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/cb.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ce.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ch.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ck-US.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/co.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/cr.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/cs.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/cv.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/cy.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/da.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/de-AT.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/de-CH.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/de-DE.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/de-LI.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/de-LU.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/de.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/el.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/en-AU.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/en-BZ.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/en-CA.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/en-IE.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/en-JM.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/en-NZ.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/en-PH.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/en-PI.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/en-SC.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/en-UK.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/en-US.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/en-ZA.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/en-ZW.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/en.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/eo.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-AR.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-BO.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-CL.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-CO.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-CR.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-DO.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-EC.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-ES.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-GT.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-HN.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-MX.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-NI.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-PA.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-PE.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-PR.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-PY.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-SV.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-UY.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/es-VE.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/es.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/et.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/eu.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/fa-IR.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/fa.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/fb-LT.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/fi.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/fj.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/fo.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/fr-BE.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/fr-CA.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/fr-CH.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/fr-FR.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/fr-LU.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/fr-MC.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/fr.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/fur.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/fy.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ga.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/gd.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/gl.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/gn.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/gu.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/gv.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ha.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/haw.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/he.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/hi.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/hr.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/hsb.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ht.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/hu.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/hy.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ia.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/id.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ie.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ig.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/is.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/it-CH.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/it.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/iu.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ja.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/jw.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ka.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/kk.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/kl.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/km.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/kn.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ko-KP.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ko-KR.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ko.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/kok.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ks.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ku.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ky.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/la.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/lb.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/lg.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/li-NL.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ln.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/lo.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/lt.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/lv.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/md.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/mfe.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/mg.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/mh.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/mi.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/mk.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ml.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/mn.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/mo.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/mr.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ms.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/mt.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/my.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/na.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/nb.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/nd.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ne.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ng.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/nl-NE.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/nl.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/nn.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/no.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/nr.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/nso.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/nv.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ny.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/nyn.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/oc.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/om.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/or.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/pa-IN.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/pa-PK.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/pa.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/pf.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/pl.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/pp.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ps.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/pt-BZ.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/pt.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/qu-PE.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/qu.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/rj.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/rm.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/rn.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ro-MD.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ro-RO.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ro.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ru.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/rw.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/sa.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/sc.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/sd.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/se-NO.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/sg.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/sh.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/si.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/sk.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/sl.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/sm.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/sn.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/so.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/sq.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/sr-me.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/sr.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ss.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/st.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/su.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/sv-FI.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/sv-SE.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/sv.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/sw.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ta.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/te.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/tg.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/th.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ti.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/tig.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/tk.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/tl.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/tlh.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/tn.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/to.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/tr.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ts.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/tt.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/tw.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ug.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/uk.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ur.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/uz.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/ve.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/vi.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/vo.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/wa.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/wo.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/xh.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/yi.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/yo.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/zh-CN.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/zh-HK.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/zh-SG.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/zh-TW.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/zh.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/flags/zu.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/globe.gif +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/help.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/help/color_coding.png +0 -0
- data/app/assets/images/tr8n/help/cousin.png +0 -0
- data/app/assets/images/tr8n/help/half-cousin.png +0 -0
- data/app/assets/images/tr8n/help/hindu_family_tree.jpg +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/help/language_selector.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/help/language_selector_default.png +0 -0
- data/app/assets/images/tr8n/help/language_selector_v2.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/help/languages_disabled.png +0 -0
- data/app/assets/images/tr8n/help/path.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/help/translator.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/help2.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/information.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/keyboard.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/language_selector_arrow.gif +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/left_quote.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/lightning.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/loading.gif +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/loading2.gif +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/loading3.gif +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/loading_large.gif +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/lock.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/lock_add.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/lock_delete.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/lock_open.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/medals/bronze.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/medals/gold.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/medals/runner.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/medals/silver.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/pencil.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/photo_silhouette.gif +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/plus.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/random.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/random2.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/rating_star0.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/rating_star05.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/rating_star1.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/rating_stars.gif +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/rating_stars.psd +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/reply.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/right_quote.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/rotating_world.gif +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/script.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/script_edit.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/script_gear.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/site_sprite.gif +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/spinner.gif +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/star.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/table_edit.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/table_gear.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/table_multiple.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/thumb_down.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/thumb_up.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/toolbar_bg.gif +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/top_left_stem.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/top_right_stem.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/tr8n_loading.gif +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/tr8n_logo.jpg +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/tr8n_logo.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/tr8n_logo2.gif +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/tr8n_logo2.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/tr8n_logo_wiki.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/tr8n_logo_wiki2.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/translate_icn.gif +0 -0
- data/app/assets/images/tr8n/warning.png +0 -0
- data/{public/tr8n/images → app/assets/images/tr8n}/wizard.png +0 -0
- data/app/assets/javascripts/tr8n/application.js +7 -0
- data/{public/tr8n/javascripts → app/assets/javascripts/tr8n}/jsDraw2D.js +0 -0
- data/{public/tr8n/javascripts → app/assets/javascripts/tr8n}/keyboard_1_36.js +1 -1
- data/{public/tr8n/javascripts → app/assets/javascripts/tr8n}/keyboard_1_44.js +0 -0
- data/{public/tr8n/javascripts → app/assets/javascripts/tr8n}/shortcut.js +0 -0
- data/{public/tr8n/javascripts → app/assets/javascripts/tr8n}/tr8n.js +18 -30
- data/{public/tr8n/javascripts → app/assets/javascripts/tr8n}/tr8n_client_sdk.js +0 -0
- data/{public/tr8n/javascripts → app/assets/javascripts/tr8n}/tr8n_prototype_effects.js +1 -1
- data/app/assets/stylesheets/tr8n/application.css +6 -0
- data/{public/tr8n/stylesheets → app/assets/stylesheets/tr8n}/keyboard_1_36.css +0 -0
- data/{public/tr8n/stylesheets → app/assets/stylesheets/tr8n}/keyboard_1_44.css +0 -0
- data/{public/tr8n/stylesheets/tr8n.css → app/assets/stylesheets/tr8n/tr8n.css.scss} +272 -37
- data/app/controllers/{application_controller.rb → tr8n/application_controller.rb} +3 -4
- data/app/controllers/tr8n/awards_controller.rb +2 -4
- data/app/controllers/tr8n/dashboard_controller.rb +6 -5
- data/app/controllers/tr8n/forum_controller.rb +2 -2
- data/app/controllers/tr8n/glossary_controller.rb +3 -9
- data/app/controllers/tr8n/home_controller.rb +1 -1
- data/app/controllers/tr8n/language_controller.rb +276 -270
- data/app/controllers/tr8n/phrases_controller.rb +9 -19
- data/app/controllers/tr8n/translations_controller.rb +1 -2
- data/app/helpers/tr8n/admin/base_helper.rb +1 -1
- data/app/helpers/{application_helper.rb → tr8n/application_helper.rb} +3 -2
- data/app/helpers/tr8n/base_helper.rb +5 -1
- data/app/models/tr8n/language.rb +1 -0
- data/app/models/tr8n/language_case_filter.rb +1 -1
- data/app/models/tr8n/language_case_rule_filter.rb +1 -1
- data/app/models/tr8n/language_case_value_map_filter.rb +4 -0
- data/app/models/tr8n/language_forum_abuse_report_filter.rb +4 -0
- data/app/models/tr8n/language_forum_message_filter.rb +4 -0
- data/app/models/tr8n/language_forum_topic_filter.rb +4 -0
- data/app/models/tr8n/language_metric.rb +1 -1
- data/app/models/tr8n/language_metric_filter.rb +4 -0
- data/app/models/tr8n/language_rule_filter.rb +7 -3
- data/app/models/tr8n/language_user_filter.rb +4 -4
- data/app/models/tr8n/translation.rb +12 -33
- data/app/models/tr8n/translation_filter.rb +4 -4
- data/app/models/tr8n/translation_key.rb +32 -55
- data/app/models/tr8n/translation_key_comment_filter.rb +1 -1
- data/app/models/tr8n/translation_key_lock_filter.rb +1 -1
- data/app/models/tr8n/translation_key_source_filter.rb +1 -1
- data/app/models/tr8n/translation_source_filter.rb +1 -1
- data/app/models/tr8n/translation_vote_filter.rb +4 -4
- data/app/models/tr8n/translator_filter.rb +4 -0
- data/app/models/tr8n/translator_following_filter.rb +4 -4
- data/app/models/tr8n/translator_log_filter.rb +4 -4
- data/app/models/tr8n/translator_metric_filter.rb +4 -4
- data/app/models/tr8n/translator_report_filter.rb +1 -1
- data/app/views/layouts/tr8n/application.html.erb +14 -0
- data/app/views/tr8n/admin/clientsdk/lb_samples.html.erb +31 -29
- data/app/views/tr8n/admin/common/_lightbox_buttons.html.erb +1 -1
- data/app/views/tr8n/admin/domain/index.html.erb +1 -1
- data/app/views/tr8n/admin/domain/{key_sources.rhtml → key_sources.html.erb} +1 -1
- data/app/views/tr8n/admin/domain/lb_caller.html.erb +39 -35
- data/app/views/tr8n/admin/domain/sources.html.erb +1 -1
- data/app/views/tr8n/admin/glossary/lb_update.html.erb +33 -26
- data/app/views/tr8n/admin/language/index.html.erb +3 -3
- data/app/views/tr8n/admin/language/lb_update.html.erb +86 -76
- data/app/views/tr8n/admin/language/lb_value_map.html.erb +45 -41
- data/app/views/tr8n/admin/language/{metrics.rhtml → metrics.html.erb} +0 -0
- data/app/views/tr8n/admin/language/{users.rhtml → users.html.erb} +0 -0
- data/app/views/tr8n/admin/translation/{votes.rhtml → votes.html.erb} +0 -0
- data/app/views/tr8n/admin/translation_key/comments.html.erb +1 -1
- data/app/views/tr8n/admin/translation_key/index.html.erb +1 -1
- data/app/views/tr8n/admin/translation_key/lb_merge.html.erb +15 -3
- data/app/views/tr8n/admin/translation_key/lb_update.html.erb +54 -44
- data/app/views/tr8n/admin/translation_key/locks.html.erb +1 -1
- data/app/views/tr8n/admin/translator/lb_register.html.erb +27 -18
- data/app/views/tr8n/awards/_list.html.erb +11 -11
- data/app/views/tr8n/awards/index.html.erb +1 -1
- data/app/views/tr8n/common/_flashes.html.erb +58 -16
- data/app/views/tr8n/common/_language_selector.html.erb +10 -6
- data/app/views/tr8n/common/_paginator.html.erb +8 -2
- data/app/views/tr8n/common/_scripts.html.erb +6 -5
- data/app/views/tr8n/common/_splash_screen.html.erb +2 -2
- data/app/views/tr8n/common/_translation_votes.html.erb +5 -5
- data/app/views/tr8n/dashboard/_forum.html.erb +13 -11
- data/app/views/tr8n/dashboard/_language_metric.html.erb +1 -1
- data/app/views/tr8n/dashboard/_translations.html.erb +1 -10
- data/app/views/tr8n/dashboard/_translator_metric.html.erb +1 -1
- data/app/views/tr8n/dashboard/_votes.html.erb +4 -13
- data/app/views/tr8n/dashboard/{index.rhtml → index.html.erb} +3 -3
- data/app/views/tr8n/forum/_messages.html.erb +2 -9
- data/app/views/tr8n/forum/_new_message.html.erb +1 -1
- data/app/views/tr8n/forum/_new_topic.html.erb +1 -1
- data/app/views/tr8n/forum/index.html.erb +3 -10
- data/app/views/tr8n/forum/topic.html.erb +2 -2
- data/app/views/tr8n/glossary/index.html.erb +2 -2
- data/app/views/tr8n/help/_footer.html.erb +4 -0
- data/app/views/tr8n/help/_header.html.erb +106 -0
- data/app/views/tr8n/help/_navigation.html.erb +80 -116
- data/app/views/tr8n/help/advanced_tools.html.erb +13 -0
- data/app/views/tr8n/help/awards.html.erb +8 -8
- data/app/views/tr8n/help/creating_translations.html.erb +19 -9
- data/app/views/tr8n/help/dashboard.html.erb +34 -7
- data/app/views/tr8n/help/discussions.html.erb +8 -8
- data/app/views/tr8n/help/help.html.erb +14 -0
- data/app/views/tr8n/help/index.html.erb +15 -10
- data/app/views/tr8n/help/inline_translator.html.erb +59 -0
- data/app/views/tr8n/help/language_selector.html.erb +46 -6
- data/app/views/tr8n/help/management.html.erb +42 -0
- data/app/views/tr8n/help/phrases.html.erb +12 -13
- data/app/views/tr8n/help/{translation_rank.html.erb → ranks.html.erb} +20 -10
- data/app/views/tr8n/help/relationships.html.erb +14 -0
- data/app/views/tr8n/help/site_map.html.erb +18 -11
- data/app/views/tr8n/help/translations.html.erb +8 -8
- data/app/views/tr8n/help/voting_on_translations.html.erb +8 -8
- data/app/views/tr8n/home/credits.html.erb +1 -2
- data/app/views/tr8n/home/index.html.erb +43 -31
- data/app/views/tr8n/language/_basic_info.html.erb +1 -1
- data/app/views/tr8n/language/_edit_language_case_rules.html.erb +7 -7
- data/app/views/tr8n/language/_edit_language_cases.html.erb +2 -2
- data/app/views/tr8n/language/_edit_rules.html.erb +2 -2
- data/app/views/tr8n/language/_grammar.html.erb +1 -1
- data/app/views/tr8n/language/_header.html.erb +3 -3
- data/app/views/tr8n/language/_language_cases.html.erb +2 -2
- data/app/views/tr8n/language/_lists.html.erb +3 -3
- data/app/views/tr8n/language/_prohibited_words.html.erb +1 -1
- data/app/views/tr8n/language/_select.html.erb +106 -0
- data/app/views/tr8n/language/_translator_header.html.erb +2 -2
- data/app/views/tr8n/language/_translator_submit.html.erb +2 -2
- data/app/views/tr8n/language/lb_language_case_rule.html.erb +45 -39
- data/app/views/tr8n/language/select.html.erb +3 -3
- data/app/views/tr8n/language/translator.html.erb +2 -2
- data/app/views/tr8n/phrases/_breadcrumb.html.erb +1 -1
- data/app/views/tr8n/phrases/_comments_module.html.erb +19 -26
- data/app/views/tr8n/phrases/{_dictionary.rhtml → _dictionary.html.erb} +0 -0
- data/app/views/tr8n/phrases/_header.html.erb +5 -5
- data/app/views/tr8n/phrases/_new_comment.html.erb +1 -1
- data/app/views/tr8n/phrases/_permutations_module.html.erb +2 -2
- data/app/views/tr8n/phrases/_tokens.html.erb +1 -1
- data/app/views/tr8n/phrases/_toolbar.html.erb +10 -10
- data/app/views/tr8n/phrases/_translation_module.html.erb +4 -4
- data/app/views/tr8n/phrases/_translations_module.html.erb +2 -2
- data/app/views/tr8n/phrases/index.html.erb +4 -4
- data/app/views/tr8n/phrases/lb_sources.html.erb +8 -12
- data/app/views/tr8n/phrases/map.html.erb +1 -1
- data/app/views/tr8n/translations/_translation.html.erb +10 -10
- data/app/views/tr8n/translations/index.html.erb +2 -2
- data/app/views/tr8n/translator/_basic_info.html.erb +1 -1
- data/app/views/tr8n/translator/_header.html.erb +3 -3
- data/app/views/tr8n/translator/_header_key_report.html.erb +1 -1
- data/app/views/tr8n/translator/lb_report.html.erb +82 -73
- data/config/routes.rb +8 -8
- data/lib/tasks/tr8n_tasks.rake +0 -11
- data/lib/tr8n.rb +3 -1
- data/lib/tr8n/active_dumper.rb +19 -17
- data/lib/tr8n/cache.rb +27 -25
- data/lib/tr8n/config.rb +558 -556
- data/lib/tr8n/dictionary.rb +21 -19
- data/lib/tr8n/engine.rb +24 -25
- data/lib/tr8n/exception.rb +4 -2
- data/lib/tr8n/extender.rb +11 -9
- data/lib/tr8n/extensions/action_controller_extension.rb +158 -0
- data/lib/tr8n/extensions/action_view_extension.rb +395 -0
- data/lib/{core_ext/array.rb → tr8n/extensions/array_extension.rb} +0 -0
- data/lib/{core_ext/date.rb → tr8n/extensions/date_extension.rb} +0 -0
- data/lib/{core_ext/fixnum.rb → tr8n/extensions/fixnum_extension.rb} +0 -0
- data/lib/{core_ext/hash.rb → tr8n/extensions/hash_extension.rb} +0 -0
- data/lib/{core_ext/string.rb → tr8n/extensions/string_extension.rb} +0 -0
- data/lib/{core_ext/time.rb → tr8n/extensions/time_extension.rb} +0 -0
- data/lib/tr8n/ip_address.rb +26 -24
- data/lib/tr8n/key_registration_exception.rb +3 -1
- data/lib/tr8n/keyboard_mapping.rb +147 -145
- data/lib/tr8n/logger.rb +30 -28
- data/lib/{application_controller.rb → tr8n/railtie.rb} +28 -10
- data/lib/tr8n/site_map.rb +48 -46
- data/lib/tr8n/site_map_section.rb +69 -67
- data/lib/tr8n/token.rb +330 -328
- data/lib/tr8n/token_exception.rb +3 -2
- data/lib/tr8n/tokenized_label.rb +90 -88
- data/lib/tr8n/version.rb +3 -0
- data/script/rails +3 -3
- data/test/dummy/.sass-cache/32be4db30d38349a3a6e662df9bb5599dc8033b9/actions.css.scssc +0 -0
- data/test/dummy/.sass-cache/32be4db30d38349a3a6e662df9bb5599dc8033b9/buttons.css.scssc +0 -0
- data/test/dummy/.sass-cache/32be4db30d38349a3a6e662df9bb5599dc8033b9/calendar.css.scssc +0 -0
- data/test/dummy/.sass-cache/32be4db30d38349a3a6e662df9bb5599dc8033b9/exporter.css.scssc +0 -0
- data/test/dummy/.sass-cache/32be4db30d38349a3a6e662df9bb5599dc8033b9/filter.css.scssc +0 -0
- data/test/dummy/.sass-cache/32be4db30d38349a3a6e662df9bb5599dc8033b9/results.css.scssc +0 -0
- data/test/dummy/.sass-cache/3d45bab40fcae805deb2750a9342f5b355a9f2bf/components.css.scssc +0 -0
- data/test/dummy/.sass-cache/3d45bab40fcae805deb2750a9342f5b355a9f2bf/layout.css.scssc +0 -0
- data/test/dummy/.sass-cache/50f723c1dd802042d0091035528d53e6d5bc5b50/tr8n.css.scssc +0 -0
- data/test/dummy/.sass-cache/bce64928c8e2edcba72a647a44f05af1ff119c5d/actions.css.scssc +0 -0
- data/test/dummy/.sass-cache/bce64928c8e2edcba72a647a44f05af1ff119c5d/buttons.css.scssc +0 -0
- data/test/dummy/.sass-cache/bce64928c8e2edcba72a647a44f05af1ff119c5d/calendar.css.scssc +0 -0
- data/test/dummy/.sass-cache/bce64928c8e2edcba72a647a44f05af1ff119c5d/exporter.css.scssc +0 -0
- data/test/dummy/.sass-cache/bce64928c8e2edcba72a647a44f05af1ff119c5d/filter.css.scssc +0 -0
- data/test/dummy/.sass-cache/bce64928c8e2edcba72a647a44f05af1ff119c5d/results.css.scssc +0 -0
- data/test/dummy/Rakefile +7 -0
- data/test/dummy/app/assets/javascripts/application.js +7 -0
- data/test/dummy/app/assets/stylesheets/admin.css +200 -0
- data/test/dummy/app/assets/stylesheets/application.css +47 -0
- data/{public/tr8n/stylesheets/components.css → test/dummy/app/assets/stylesheets/components.css.scss} +5 -2
- data/test/dummy/app/assets/stylesheets/keyboard.css +147 -0
- data/{public/tr8n/stylesheets/layout.css → test/dummy/app/assets/stylesheets/layout.css.scss} +27 -3
- data/test/dummy/app/controllers/admin/admins_controller.rb +7 -0
- data/test/dummy/app/controllers/admin/base_controller.rb +12 -0
- data/test/dummy/app/controllers/admin/users_controller.rb +19 -0
- data/test/dummy/app/controllers/application_controller.rb +26 -0
- data/test/dummy/app/controllers/demo_controller.rb +7 -0
- data/test/dummy/app/controllers/login_controller.rb +58 -0
- data/test/dummy/app/helpers/application_helper.rb +9 -0
- data/test/dummy/app/helpers/home_helper.rb +2 -0
- data/{public/favicon.ico → test/dummy/app/mailers/.gitkeep} +0 -0
- data/test/dummy/app/models/.gitkeep +0 -0
- data/test/dummy/app/models/admin.rb +4 -0
- data/test/dummy/app/models/admin_filter.rb +9 -0
- data/test/dummy/app/models/user.rb +31 -0
- data/test/dummy/app/views/admin/admins/index.html.erb +7 -0
- data/test/dummy/app/views/admin/users/index.html.erb +10 -0
- data/test/dummy/app/views/demo/index.rhtml +108 -0
- data/test/dummy/app/views/demo/tokens.rhtml +35 -0
- data/test/dummy/app/views/layouts/_flashes.html.erb +86 -0
- data/test/dummy/app/views/layouts/_footer.html.erb +17 -0
- data/test/dummy/app/views/layouts/_header.html.erb +23 -0
- data/test/dummy/app/views/layouts/admin.html.erb +94 -0
- data/test/dummy/app/views/layouts/application.html.erb +25 -0
- data/test/dummy/app/views/login/index.html.erb +32 -0
- data/test/dummy/app/views/login/register.html.erb +61 -0
- data/{config.ru → test/dummy/config.ru} +1 -1
- data/test/dummy/config/application.rb +47 -0
- data/test/dummy/config/boot.rb +10 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/{config → test/dummy/config}/environments/development.rb +8 -3
- data/test/dummy/config/environments/production.rb +60 -0
- data/{config → test/dummy/config}/environments/test.rb +9 -2
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/inflections.rb +10 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +7 -0
- data/test/dummy/config/initializers/session_store.rb +8 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +5 -0
- data/test/dummy/config/routes.rb +16 -0
- data/test/dummy/config/tr8n/config.yml +247 -0
- data/test/dummy/config/tr8n/data/ip_locations.csv +93460 -0
- data/test/dummy/config/tr8n/rules/default_cases.yml +141 -0
- data/test/dummy/config/tr8n/rules/default_date_rules.yml +20 -0
- data/test/dummy/config/tr8n/rules/default_gender_list_rules.yml +82 -0
- data/test/dummy/config/tr8n/rules/default_gender_rules.yml +20 -0
- data/test/dummy/config/tr8n/rules/default_list_rules.yml +19 -0
- data/test/dummy/config/tr8n/rules/default_numeric_rules.yml +42 -0
- data/test/dummy/config/tr8n/rules/default_value_rules.yml +18 -0
- data/test/dummy/config/tr8n/site/default_glossary.yml +18 -0
- data/test/dummy/config/tr8n/site/default_languages.yml +1591 -0
- data/test/dummy/config/tr8n/site/features.yml +111 -0
- data/test/dummy/config/tr8n/site/shortcuts.yml +55 -0
- data/test/dummy/config/tr8n/site/sitemap.json +42 -0
- data/test/dummy/config/tr8n/tokens/data.yml +19 -0
- data/test/dummy/config/tr8n/tokens/decorations.yml +16 -0
- data/{config → test/dummy/config}/will_filter/config.yml +0 -0
- data/test/dummy/db/migrate/20101207014543_create_users.rb +23 -0
- data/test/dummy/db/migrate/20110113223509_create_admins.rb +15 -0
- data/test/dummy/db/migrate/20110930041143_create_will_filter_filters.rb +15 -0
- data/test/dummy/db/migrate/20110930041150_create_tr8n_tables.rb +350 -0
- data/test/dummy/db/schema.rb +398 -0
- data/test/dummy/lib/assets/.gitkeep +0 -0
- data/test/dummy/log/.gitkeep +0 -0
- data/{public → test/dummy/public}/404.html +0 -0
- data/{public → test/dummy/public}/422.html +0 -0
- data/{public → test/dummy/public}/500.html +0 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/script/rails +6 -0
- data/test/dummy/test/functional/home_controller_test.rb +9 -0
- data/test/dummy/test/unit/helpers/home_helper_test.rb +4 -0
- data/test/integration/navigation_test.rb +10 -0
- data/test/test_helper.rb +7 -10
- data/test/tr8n_test.rb +7 -0
- data/tr8n.gemspec +33 -34
- metadata +772 -536
- data/.project +0 -18
- data/LICENSE +0 -18
- data/VERSION +0 -1
- data/app/views/tr8n/help/basic_information.html.erb +0 -13
- data/app/views/tr8n/help/context_rules.html.erb +0 -13
- data/app/views/tr8n/help/direction.html.erb +0 -13
- data/app/views/tr8n/help/enter_translation.html.erb +0 -13
- data/app/views/tr8n/help/fallback_language.html.erb +0 -13
- data/app/views/tr8n/help/generate_context_rules.html.erb +0 -17
- data/app/views/tr8n/help/inline_translations.html.erb +0 -28
- data/app/views/tr8n/help/language_dashboard.html.erb +0 -21
- data/app/views/tr8n/help/language_phrases.html.erb +0 -17
- data/app/views/tr8n/help/language_statistics.html.erb +0 -13
- data/app/views/tr8n/help/manage.html.erb +0 -13
- data/app/views/tr8n/help/manage_language.html.erb +0 -13
- data/app/views/tr8n/help/native_name.html.erb +0 -13
- data/app/views/tr8n/help/original_phrase.html.erb +0 -13
- data/app/views/tr8n/help/other_languages.html.erb +0 -15
- data/app/views/tr8n/help/other_translatable_resources.html.erb +0 -13
- data/app/views/tr8n/help/phrases_with_translations.html.erb +0 -21
- data/app/views/tr8n/help/phrases_without_translations.html.erb +0 -15
- data/app/views/tr8n/help/prohibited_words.html.erb +0 -13
- data/app/views/tr8n/help/rank.html.erb +0 -13
- data/app/views/tr8n/help/recent_discussions.html.erb +0 -13
- data/app/views/tr8n/help/recent_translation_votes.html.erb +0 -13
- data/app/views/tr8n/help/recent_translations.html.erb +0 -13
- data/app/views/tr8n/help/site_sections.html.erb +0 -13
- data/app/views/tr8n/help/suggested_translation.html.erb +0 -13
- data/app/views/tr8n/help/translating_inline.html.erb +0 -30
- data/app/views/tr8n/help/translation_context_rules.html.erb +0 -16
- data/app/views/tr8n/help/translation_tokens.html.erb +0 -13
- data/app/views/tr8n/help/translation_tools.html.erb +0 -13
- data/app/views/tr8n/help/user_rank.html.erb +0 -13
- data/app/views/tr8n/help/using_translation_tools.html.erb +0 -13
- data/app/views/tr8n/help/your_dashboard.html.erb +0 -17
- data/app/views/tr8n/help/your_languages.html.erb +0 -19
- data/app/views/tr8n/help/your_translations.html.erb +0 -17
- data/config/application.rb +0 -65
- data/config/boot.rb +0 -6
- data/config/database.yml +0 -13
- data/config/environment.rb +0 -46
- data/db/extras/20100511185330_create_test_users.rb +0 -43
- data/db/migrate/20090730070119_create_will_filter_tables.rb +0 -19
- data/db/seeds.rb +0 -7
- data/lib/application_helper.rb +0 -390
- data/lib/tr8n/controller_methods.rb +0 -156
- data/public/robots.txt +0 -5
- data/public/tr8n/images/flags/.DS_Store +0 -0
- data/rails/init.rb +0 -53
- data/test/performance/browsing_test.rb +0 -9
data/lib/tr8n/dictionary.rb
CHANGED
@@ -24,30 +24,32 @@
|
|
24
24
|
require 'rexml/document'
|
25
25
|
require 'net/http'
|
26
26
|
|
27
|
-
|
27
|
+
module Tr8n
|
28
|
+
class Dictionary
|
28
29
|
|
29
|
-
|
30
|
-
|
30
|
+
def self.load_definitions_for(words)
|
31
|
+
words = [words] unless words.is_a?(Array)
|
31
32
|
|
32
|
-
|
33
|
+
definitions = {}
|
33
34
|
|
34
|
-
|
35
|
-
|
36
|
-
|
35
|
+
words.each do |word|
|
36
|
+
Net::HTTP.start("services.aonaware.com") do |http|
|
37
|
+
response = http.get("/DictService/DictService.asmx/Define?word=#{word}")
|
37
38
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
39
|
+
doc = REXML::Document.new(response.body)
|
40
|
+
doc.elements.each('WordDefinition/Definitions/Definition') do |d|
|
41
|
+
word = d.elements["Word"].text.downcase
|
42
|
+
source = d.elements["Dictionary"].elements["Name"].text
|
43
|
+
definition = d.elements["WordDefinition"].text
|
43
44
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
45
|
+
definitions[word] ||= []
|
46
|
+
definitions[word] << {:source => source, :definition => definition}
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
definitions
|
48
52
|
end
|
49
53
|
|
50
|
-
definitions
|
51
54
|
end
|
52
|
-
|
53
|
-
end
|
55
|
+
end
|
data/lib/tr8n/engine.rb
CHANGED
@@ -1,29 +1,28 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2010-2011 Michael Berkovich
|
3
|
+
#
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
5
|
+
# a copy of this software and associated documentation files (the
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
10
|
+
# the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be
|
13
|
+
# included in all copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
+
#++
|
5
23
|
|
6
|
-
module Tr8n
|
24
|
+
module Tr8n
|
7
25
|
class Engine < Rails::Engine
|
8
|
-
|
9
|
-
config.autoload_paths << File.expand_path("../../lib/core_ext/**", __FILE__)
|
10
|
-
config.autoload_paths << File.expand_path("../../lib/tr8n", __FILE__)
|
11
|
-
config.autoload_paths << File.expand_path("../../lib/tr8n/tokens", __FILE__)
|
12
|
-
config.autoload_paths << File.expand_path("../../app/models/tr8n", __FILE__)
|
13
|
-
|
14
|
-
[
|
15
|
-
"../../lib/core_ext/**",
|
16
|
-
"../../lib/tr8n",
|
17
|
-
"../../lib/tr8n/tokens",
|
18
|
-
"../../lib"
|
19
|
-
].each do |dir|
|
20
|
-
Dir[File.expand_path("#{File.dirname(__FILE__)}/#{dir}/*.rb")].sort.each do |file|
|
21
|
-
require_or_load file
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
initializer "static assets" do |app|
|
26
|
-
app.middleware.insert_before(::ActionDispatch::Static, ::ActionDispatch::Static, "#{root}/public")
|
27
|
-
end
|
26
|
+
isolate_namespace Tr8n
|
28
27
|
end
|
29
28
|
end
|
data/lib/tr8n/exception.rb
CHANGED
data/lib/tr8n/extender.rb
CHANGED
@@ -21,14 +21,16 @@
|
|
21
21
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
22
|
#++
|
23
23
|
|
24
|
-
module Tr8n
|
25
|
-
|
26
|
-
mod
|
27
|
-
|
28
|
-
|
24
|
+
module Tr8n
|
25
|
+
module Extender
|
26
|
+
def extended(mod)
|
27
|
+
mod.send(:extend, self::ClassMethods)
|
28
|
+
mod.send(:include, self::InstanceMethods)
|
29
|
+
end
|
29
30
|
|
30
|
-
|
31
|
-
|
32
|
-
|
31
|
+
def included(mod)
|
32
|
+
mod.send(:extend, self::ClassMethods)
|
33
|
+
mod.send(:include, self::InstanceMethods)
|
34
|
+
end
|
33
35
|
end
|
34
|
-
end
|
36
|
+
end
|
@@ -0,0 +1,158 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2010-2011 Michael Berkovich
|
3
|
+
#
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
5
|
+
# a copy of this software and associated documentation files (the
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
10
|
+
# the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be
|
13
|
+
# included in all copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
+
#++
|
23
|
+
|
24
|
+
module Tr8n
|
25
|
+
module ActionControllerExtension
|
26
|
+
def self.included(base)
|
27
|
+
base.send(:include, InstanceMethods)
|
28
|
+
base.before_filter :init_tr8n
|
29
|
+
end
|
30
|
+
|
31
|
+
module InstanceMethods
|
32
|
+
######################################################################
|
33
|
+
# Author: Iain Hecker
|
34
|
+
# reference: http://github.com/iain/http_accept_language
|
35
|
+
######################################################################
|
36
|
+
def tr8n_browser_accepted_locales
|
37
|
+
@accepted_languages ||= request.env['HTTP_ACCEPT_LANGUAGE'].split(/\s*,\s*/).collect do |l|
|
38
|
+
l += ';q=1.0' unless l =~ /;q=\d+\.\d+$/
|
39
|
+
l.split(';q=')
|
40
|
+
end.sort do |x,y|
|
41
|
+
raise Tr8n::Exception.new("Not correctly formatted") unless x.first =~ /^[a-z\-]+$/i
|
42
|
+
y.last.to_f <=> x.last.to_f
|
43
|
+
end.collect do |l|
|
44
|
+
l.first.downcase.gsub(/-[a-z]+$/i) { |x| x.upcase }
|
45
|
+
end
|
46
|
+
rescue
|
47
|
+
[]
|
48
|
+
end
|
49
|
+
|
50
|
+
def tr8n_user_preffered_locale
|
51
|
+
tr8n_browser_accepted_locales.each do |locale|
|
52
|
+
lang = Tr8n::Language.for(locale)
|
53
|
+
return locale if lang and lang.enabled?
|
54
|
+
end
|
55
|
+
Tr8n::Config.default_locale
|
56
|
+
end
|
57
|
+
|
58
|
+
def tr8n_request_remote_ip
|
59
|
+
@remote_ip ||= if request.env['HTTP_X_FORWARDED_FOR']
|
60
|
+
request.env['HTTP_X_FORWARDED_FOR'].split(',').first
|
61
|
+
else
|
62
|
+
request.remote_ip
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def init_tr8n
|
67
|
+
tr8n_current_locale = nil
|
68
|
+
begin
|
69
|
+
tr8n_current_locale = eval(Tr8n::Config.current_locale_method)
|
70
|
+
rescue
|
71
|
+
# fallback to the default session based locale implementation
|
72
|
+
# choose the first language from the accepted languages header
|
73
|
+
session[:locale] = tr8n_user_preffered_locale unless session[:locale]
|
74
|
+
session[:locale] = params[:locale] if params[:locale]
|
75
|
+
tr8n_current_locale = session[:locale]
|
76
|
+
end
|
77
|
+
|
78
|
+
tr8n_current_user = nil
|
79
|
+
if Tr8n::Config.site_user_info_enabled?
|
80
|
+
begin
|
81
|
+
tr8n_current_user = eval(Tr8n::Config.current_user_method)
|
82
|
+
tr8n_current_user = nil if tr8n_current_user.class.name != Tr8n::Config.user_class_name
|
83
|
+
rescue
|
84
|
+
tr8n_current_user = Tr8n::Translator.new
|
85
|
+
Tr8n::Logger.error("Site user integration is enabled, but #{Tr8n::Config.current_user_method} method is not defined")
|
86
|
+
end
|
87
|
+
else
|
88
|
+
tr8n_current_user = Tr8n::Translator.find_by_id(session[:tr8n_translator_id]) if session[:tr8n_translator_id]
|
89
|
+
tr8n_current_user = Tr8n::Translator.new unless tr8n_current_user
|
90
|
+
end
|
91
|
+
|
92
|
+
# initialize request thread variables
|
93
|
+
Tr8n::Config.init(tr8n_current_locale, tr8n_current_user)
|
94
|
+
|
95
|
+
# track user's last ip address
|
96
|
+
if Tr8n::Config.enable_country_tracking? and Tr8n::Config.current_user_is_translator?
|
97
|
+
Tr8n::Config.current_translator.update_last_ip(tr8n_request_remote_ip)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
############################################################
|
102
|
+
# There are two ways to call the tr method
|
103
|
+
#
|
104
|
+
# tr(label, desc = "", tokens = {}, options = {})
|
105
|
+
# or
|
106
|
+
# tr(label, {:desc => "", tokens => {}, ...})
|
107
|
+
############################################################
|
108
|
+
def tr(label, desc = "", tokens = {}, options = {})
|
109
|
+
if desc.is_a?(Hash)
|
110
|
+
options = desc
|
111
|
+
tokens = options[:tokens] || {}
|
112
|
+
desc = options[:desc] || ""
|
113
|
+
end
|
114
|
+
|
115
|
+
begin
|
116
|
+
url = request.url
|
117
|
+
host = request.env['HTTP_HOST']
|
118
|
+
source = "#{controller.class.name.underscore.gsub("_controller", "")}/#{controller.action_name}"
|
119
|
+
rescue
|
120
|
+
source = self.class.name
|
121
|
+
url = nil
|
122
|
+
host = 'localhost'
|
123
|
+
end
|
124
|
+
|
125
|
+
options.merge!(:source => source) unless options[:source]
|
126
|
+
options.merge!(:caller => caller)
|
127
|
+
options.merge!(:url => url)
|
128
|
+
options.merge!(:host => host)
|
129
|
+
|
130
|
+
unless Tr8n::Config.enabled?
|
131
|
+
return Tr8n::TranslationKey.substitute_tokens(label, tokens, options)
|
132
|
+
end
|
133
|
+
|
134
|
+
Tr8n::Config.current_language.translate(label, desc, tokens, options)
|
135
|
+
end
|
136
|
+
|
137
|
+
# for translating labels
|
138
|
+
def trl(label, desc = "", tokens = {}, options = {})
|
139
|
+
tr(label, desc, tokens, options.merge(:skip_decorations => true))
|
140
|
+
end
|
141
|
+
|
142
|
+
# flash notice
|
143
|
+
def trfn(label, desc = "", tokens = {}, options = {})
|
144
|
+
flash[:trfn] = tr(label, desc, tokens, options)
|
145
|
+
end
|
146
|
+
|
147
|
+
# flash error
|
148
|
+
def trfe(label, desc = "", tokens = {}, options = {})
|
149
|
+
flash[:trfe] = tr(label, desc, tokens, options)
|
150
|
+
end
|
151
|
+
|
152
|
+
# flash error
|
153
|
+
def trfw(label, desc = "", tokens = {}, options = {})
|
154
|
+
flash[:trfw] = tr(label, desc, tokens, options)
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
@@ -0,0 +1,395 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2010-2011 Michael Berkovich
|
3
|
+
#
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
5
|
+
# a copy of this software and associated documentation files (the
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
10
|
+
# the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be
|
13
|
+
# included in all copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
+
#++
|
23
|
+
|
24
|
+
module Tr8n
|
25
|
+
module ActionViewExtension
|
26
|
+
extend ActiveSupport::Concern
|
27
|
+
module InstanceMethods
|
28
|
+
|
29
|
+
# generates translations json for client sdk
|
30
|
+
def tr8n_translations_js_tag(opts = {})
|
31
|
+
html = []
|
32
|
+
html << "<script>"
|
33
|
+
|
34
|
+
var_name = opts[:id] || :tr8n_translations
|
35
|
+
|
36
|
+
source_names = opts[:sources] || [opts[:source]]
|
37
|
+
sources = Tr8n::TranslationSource.find(:all, :conditions => ["source in (?)", source_names])
|
38
|
+
source_ids = sources.collect{|source| source.id}
|
39
|
+
|
40
|
+
if source_ids.empty?
|
41
|
+
conditions = ["1=2"]
|
42
|
+
else
|
43
|
+
conditions = ["(id in (select distinct(translation_key_id) from tr8n_translation_key_sources where translation_source_id in (?)))"]
|
44
|
+
conditions << source_ids.uniq
|
45
|
+
end
|
46
|
+
|
47
|
+
translations = []
|
48
|
+
Tr8n::TranslationKey.find(:all, :conditions => conditions).each_with_index do |tkey, index|
|
49
|
+
trn = tkey.translate(Tr8n::Config.current_language, {}, {:api => true})
|
50
|
+
translations << trn
|
51
|
+
end
|
52
|
+
|
53
|
+
html << "var #{var_name} = #{translations.to_json};"
|
54
|
+
|
55
|
+
html << "</script>"
|
56
|
+
html.join('').html_safe
|
57
|
+
end
|
58
|
+
|
59
|
+
# translation functions
|
60
|
+
def tr(label, desc = "", tokens = {}, options = {})
|
61
|
+
if desc.is_a?(Hash)
|
62
|
+
options = desc
|
63
|
+
tokens = options[:tokens] || {}
|
64
|
+
desc = options[:context] || ""
|
65
|
+
end
|
66
|
+
|
67
|
+
begin
|
68
|
+
url = request.url
|
69
|
+
host = request.env['HTTP_HOST']
|
70
|
+
source = "#{controller.class.name.underscore.gsub("_controller", "")}/#{controller.action_name}"
|
71
|
+
rescue
|
72
|
+
source = self.class.name
|
73
|
+
url = nil
|
74
|
+
host = 'localhost'
|
75
|
+
end
|
76
|
+
|
77
|
+
options.merge!(:source => source) unless options[:source]
|
78
|
+
options.merge!(:caller => caller)
|
79
|
+
options.merge!(:url => url)
|
80
|
+
options.merge!(:host => host)
|
81
|
+
|
82
|
+
unless Tr8n::Config.enabled?
|
83
|
+
return Tr8n::TranslationKey.substitute_tokens(label, tokens, options)
|
84
|
+
end
|
85
|
+
|
86
|
+
Tr8n::Config.current_language.translate(label, desc, tokens, options)
|
87
|
+
end
|
88
|
+
|
89
|
+
# for translating labels
|
90
|
+
def trl(label, desc = "", tokens = {}, options = {})
|
91
|
+
tr(label, desc, tokens, options.merge(:skip_decorations => true))
|
92
|
+
end
|
93
|
+
|
94
|
+
def tr8n_options_for_select(options, selected = nil, description = nil, lang = Tr8n::Config.current_language)
|
95
|
+
options_for_select(options.tro(description), selected)
|
96
|
+
end
|
97
|
+
|
98
|
+
def tr8n_phrases_link_tag(search = "", phrase_type = :without, phrase_status = :any)
|
99
|
+
return unless Tr8n::Config.enabled?
|
100
|
+
return if Tr8n::Config.current_language.default?
|
101
|
+
return unless Tr8n::Config.open_registration_mode? or Tr8n::Config.current_user_is_translator?
|
102
|
+
return unless Tr8n::Config.current_translator.enable_inline_translations?
|
103
|
+
|
104
|
+
link_to(image_tag("tr8n/translate_icn.gif", :style => "vertical-align:middle; border: 0px;", :title => search),
|
105
|
+
:controller => "/tr8n/phrases", :action => :index,
|
106
|
+
:search => search, :phrase_type => phrase_type, :phrase_status => phrase_status).html_safe
|
107
|
+
end
|
108
|
+
|
109
|
+
def tr8n_dir_attribute_tag
|
110
|
+
"dir='<%=Tr8n::Config.current_language.dir%>'".html_safe
|
111
|
+
end
|
112
|
+
|
113
|
+
def tr8n_splash_screen_tag
|
114
|
+
html = "<div id='tr8n_splash_screen' style='display:none'>"
|
115
|
+
html << (render :partial => Tr8n::Config.splash_screen)
|
116
|
+
html << "</div>"
|
117
|
+
html.html_safe
|
118
|
+
end
|
119
|
+
|
120
|
+
def tr8n_language_flag_tag(lang = Tr8n::Config.current_language, opts = {})
|
121
|
+
return "" unless Tr8n::Config.enable_language_flags?
|
122
|
+
html = image_tag("tr8n/flags/#{lang.flag}.png", :style => "vertical-align:middle;", :title => lang.native_name)
|
123
|
+
html << " ".html_safe
|
124
|
+
html.html_safe
|
125
|
+
end
|
126
|
+
|
127
|
+
def tr8n_language_name_tag(lang = Tr8n::Config.current_language, opts = {})
|
128
|
+
show_flag = opts[:flag].nil? ? true : opts[:flag]
|
129
|
+
name_type = opts[:name].nil? ? :full : opts[:name] # :full, :native, :english, :locale
|
130
|
+
linked = opts[:linked].nil? ? true : opts[:linked]
|
131
|
+
|
132
|
+
html = "<span style='white-space: nowrap'>"
|
133
|
+
html << tr8n_language_flag_tag(lang, opts) if show_flag
|
134
|
+
|
135
|
+
name = case name_type
|
136
|
+
when :native then lang.native_name
|
137
|
+
when :english then lang.english_name
|
138
|
+
when :locale then lang.locale
|
139
|
+
else lang.full_name
|
140
|
+
end
|
141
|
+
|
142
|
+
if linked
|
143
|
+
html << link_to(name.html_safe, :controller => "/tr8n/language",
|
144
|
+
:action => :switch, :language_action => :switch_language,
|
145
|
+
:locale => lang.locale,
|
146
|
+
:source_url => opts[:source_url])
|
147
|
+
else
|
148
|
+
html << name
|
149
|
+
end
|
150
|
+
|
151
|
+
html << "</span>"
|
152
|
+
html.html_safe
|
153
|
+
end
|
154
|
+
|
155
|
+
def tr8n_language_selector_tag(opts = {})
|
156
|
+
opts[:lightbox] ||= false
|
157
|
+
opts[:style] ||= "color:#1166bb;"
|
158
|
+
opts[:show_arrow] ||= true
|
159
|
+
opts[:arrow_style] ||= "font-size:8px;"
|
160
|
+
render(:partial => '/tr8n/common/language_selector', :locals => {:opts => opts})
|
161
|
+
end
|
162
|
+
|
163
|
+
def tr8n_language_strip_tag(opts = {})
|
164
|
+
opts[:flag] = opts[:flag].nil? ? false : opts[:flag]
|
165
|
+
opts[:name] = opts[:name].nil? ? :native : opts[:name]
|
166
|
+
opts[:linked] = opts[:linked].nil? ? true : opts[:linked]
|
167
|
+
opts[:javascript] = opts[:javascript].nil? ? false : opts[:javascript]
|
168
|
+
|
169
|
+
render(:partial => '/tr8n/common/language_strip', :locals => {:opts => opts})
|
170
|
+
end
|
171
|
+
|
172
|
+
def tr8n_language_table_tag(opts = {})
|
173
|
+
opts[:cols] = opts[:cols].nil? ? 4 : opts[:cols]
|
174
|
+
opts[:col_size] = opts[:col_size].nil? ? "300px" : opts[:col_size]
|
175
|
+
render(:partial => '/tr8n/common/language_table', :locals => {:opts => opts.merge(:name => :english)})
|
176
|
+
end
|
177
|
+
|
178
|
+
def tr8n_translator_login_tag(opts = {})
|
179
|
+
opts[:class] ||= 'tr8n_right_horiz_list'
|
180
|
+
render(:partial => '/tr8n/common/translator_login', :locals => {:opts => opts})
|
181
|
+
end
|
182
|
+
|
183
|
+
def tr8n_flashes_tag(opts = {})
|
184
|
+
render(:partial => '/tr8n/common/flashes', :locals => {:opts => opts})
|
185
|
+
end
|
186
|
+
|
187
|
+
def tr8n_scripts_tag(opts = {})
|
188
|
+
render(:partial => '/tr8n/common/scripts', :locals => {:opts => opts})
|
189
|
+
end
|
190
|
+
|
191
|
+
def tr8n_client_sdk_scripts_tag(opts = {})
|
192
|
+
opts[:default_source] ||= "application"
|
193
|
+
opts[:scheduler_interval] ||= 5000
|
194
|
+
|
195
|
+
opts[:enable_inline_translations] = (Tr8n::Config.current_user_is_translator? and Tr8n::Config.current_translator.enable_inline_translations? and (not Tr8n::Config.current_language.default?))
|
196
|
+
opts[:default_decorations] = Tr8n::Config.default_decoration_tokens
|
197
|
+
opts[:default_tokens] = Tr8n::Config.default_data_tokens
|
198
|
+
opts[:rules] = {
|
199
|
+
:number => Tr8n::Config.rules_engine[:numeric_rule], :gender => Tr8n::Config.rules_engine[:gender_rule],
|
200
|
+
:list => Tr8n::Config.rules_engine[:gender_list_rule], :date => Tr8n::Config.rules_engine[:date_rule]
|
201
|
+
}
|
202
|
+
|
203
|
+
html = [javascript_include_tag("/tr8n/javascripts/tr8n_client_sdk.js")]
|
204
|
+
html << "<script>"
|
205
|
+
html << "function initializeTr8nProxy() {"
|
206
|
+
html << " tr8nProxy = new Tr8n.Proxy(#{opts.to_json});"
|
207
|
+
# html << " Tr8n.Utils.addEvent(window, 'load', function() {"
|
208
|
+
# html << " tr8nProxy = new Tr8n.Proxy(#{opts.to_json});"
|
209
|
+
# html << " });"
|
210
|
+
html << "}"
|
211
|
+
html << "initializeTr8nProxy();"
|
212
|
+
html << "</script>"
|
213
|
+
html.join("\n").html_safe
|
214
|
+
end
|
215
|
+
|
216
|
+
def tr8n_translator_rank_tag(translator, rank = nil)
|
217
|
+
return "" unless translator
|
218
|
+
|
219
|
+
rank ||= translator.rank || 0
|
220
|
+
|
221
|
+
html = "<span dir='ltr'>"
|
222
|
+
1.upto(5) do |i|
|
223
|
+
if rank > i * 20 - 10 and rank < i * 20
|
224
|
+
html << image_tag("tr8n/rating_star05.png")
|
225
|
+
elsif rank < i * 20 - 10
|
226
|
+
html << image_tag("tr8n/rating_star0.png")
|
227
|
+
else
|
228
|
+
html << image_tag("tr8n/rating_star1.png")
|
229
|
+
end
|
230
|
+
end
|
231
|
+
html << "</span>"
|
232
|
+
html.html_safe
|
233
|
+
end
|
234
|
+
|
235
|
+
def tr8n_help_icon_tag(filename = "index")
|
236
|
+
link_to(image_tag("tr8n/help.png", :style => "border:0px; vertical-align:middle;", :title => trl("Help")), {:controller => "/tr8n/help", :action => filename}, :target => "_new").html_safe
|
237
|
+
end
|
238
|
+
|
239
|
+
def tr8n_help_link(text, opts = {})
|
240
|
+
filename = opts[:filename].nil? ? text.downcase.gsub(' ', '_') : opts[:filename]
|
241
|
+
classname = "tr8n_selected" if filename == controller.action_name
|
242
|
+
link_to(text, { :controller => "/tr8n/help", :action => filename }, :class => classname).html_safe
|
243
|
+
end
|
244
|
+
|
245
|
+
def tr8n_spinner_tag(id = "spinner", label = nil, cls='spinner')
|
246
|
+
html = "<div id='#{id}' class='#{cls}' style='display:none'>"
|
247
|
+
html << image_tag("tr8n/spinner.gif", :style => "vertical-align:middle;")
|
248
|
+
html << " #{trl(label)}" if label
|
249
|
+
html << "</div>"
|
250
|
+
html.html_safe
|
251
|
+
end
|
252
|
+
|
253
|
+
def tr8n_toggler_tag(content_id, label = "", open = true)
|
254
|
+
html = "<span id='#{content_id}_open' "
|
255
|
+
html << "style='display:none'" unless open
|
256
|
+
html << ">"
|
257
|
+
html << link_to_function("#{image_tag("tr8n/arrow_down.gif", :style=>'text-align:center; vertical-align:middle')} #{label}".html_safe, "Tr8n.Effects.hide('#{content_id}_open'); Tr8n.Effects.show('#{content_id}_closed'); Tr8n.Effects.blindUp('#{content_id}');", :style=> "text-decoration:none")
|
258
|
+
html << "</span>"
|
259
|
+
html << "<span id='#{content_id}_closed' "
|
260
|
+
html << "style='display:none'" if open
|
261
|
+
html << ">"
|
262
|
+
html << link_to_function("#{image_tag("tr8n/arrow_right.gif", :style=>'text-align:center; vertical-align:middle')} #{label}".html_safe, "Tr8n.Effects.show('#{content_id}_open'); Tr8n.Effects.hide('#{content_id}_closed'); Tr8n.Effects.blindDown('#{content_id}');", :style=> "text-decoration:none")
|
263
|
+
html << "</span>"
|
264
|
+
html.html_safe
|
265
|
+
end
|
266
|
+
|
267
|
+
def tr8n_sitemap(sections, splitters, options = {})
|
268
|
+
html = ""
|
269
|
+
html << "<table style='width:100%'>"
|
270
|
+
html << "<tr>"
|
271
|
+
splitters.each do |splitter|
|
272
|
+
html << "<td style='vertical-align:top; width:" << (100 / splitters.size).to_s << "%;'>"
|
273
|
+
html << generate_sitemap(sections[splitter.first..splitter.last], options)
|
274
|
+
html << "</td>"
|
275
|
+
end
|
276
|
+
html << "</tr>"
|
277
|
+
html << "</table>"
|
278
|
+
html.html_safe
|
279
|
+
end
|
280
|
+
|
281
|
+
def tr8n_breadcrumb_tag(source = nil, opts = {})
|
282
|
+
source ||= "#{controller.class.name.underscore.gsub("_controller", "")}/#{controller.action_name}"
|
283
|
+
section = Tr8n::SiteMap.section_for_source(source)
|
284
|
+
return "" unless section
|
285
|
+
opts[:separator] ||= " >> "
|
286
|
+
opts[:min_elements] ||= 1
|
287
|
+
opts[:skip_root] ||= opts[:skip_root].nil? ? false : opts[:skip_root]
|
288
|
+
|
289
|
+
links = section.parents.collect{|node| link_to(node.title(params), node.link(params))}
|
290
|
+
return "" if links.size <= opts[:min_elements]
|
291
|
+
|
292
|
+
links.delete(links.first) if opts[:skip_root]
|
293
|
+
links.unshift(link_to(opts[:root].first, opts[:root].last)) if opts[:root]
|
294
|
+
|
295
|
+
html = "<div id='tr8n_breadcrumb' class='tr8n_breadcrumb'>"
|
296
|
+
html << links.join(opts[:separator])
|
297
|
+
html << '</div>'
|
298
|
+
html.html_safe
|
299
|
+
end
|
300
|
+
|
301
|
+
def tr8n_user_tag(translator, options = {})
|
302
|
+
return "Deleted Translator" unless translator
|
303
|
+
|
304
|
+
if options[:linked]
|
305
|
+
link_to(translator.name, translator.link).html_safe
|
306
|
+
else
|
307
|
+
translator.name
|
308
|
+
end
|
309
|
+
end
|
310
|
+
|
311
|
+
def tr8n_user_mugshot_tag(translator, options = {})
|
312
|
+
if translator and !translator.mugshot.blank?
|
313
|
+
img_url = translator.mugshot
|
314
|
+
else
|
315
|
+
img_url = Tr8n::Config.silhouette_image
|
316
|
+
end
|
317
|
+
|
318
|
+
img_tag = "<img src='#{img_url}' style='width:48px'>".html_safe
|
319
|
+
|
320
|
+
if translator and options[:linked]
|
321
|
+
link_to(img_tag, translator.link).html_safe
|
322
|
+
else
|
323
|
+
img_tag.html_safe
|
324
|
+
end
|
325
|
+
end
|
326
|
+
|
327
|
+
def tr8n_will_paginate(collection = nil, options = {})
|
328
|
+
will_paginate(collection, options.merge(:previous_label => tr("« Previous", "Previous entries in a list", {}, options),
|
329
|
+
:next_label => tr("Next »", "Next entries in a list", {}, options))).html_safe
|
330
|
+
end
|
331
|
+
|
332
|
+
def tr8n_page_entries_info(collection, options = {})
|
333
|
+
entry_name = options[:entry_name] || (collection.empty? ? 'entry' : collection.first.class.name.underscore.sub('_', ' '))
|
334
|
+
|
335
|
+
if collection.total_pages < 2
|
336
|
+
case collection.size
|
337
|
+
when 0
|
338
|
+
tr("None found", "Paginator no entries message", {}, options)
|
339
|
+
when 1
|
340
|
+
tr("Displaying [bold: 1] #{entry_name}", "Paginator one page message", {}, options)
|
341
|
+
else
|
342
|
+
tr("Displaying [bold: all {count}] #{entry_name.pluralize}", "Paginator all entries message", {:count => collection.size}, options)
|
343
|
+
end
|
344
|
+
else
|
345
|
+
tr("Displaying #{entry_name.pluralize} [bold: {start_num} - {end_num}] of [bold: {total_count}] in total",
|
346
|
+
"Paginator custom message", {
|
347
|
+
:start_num => collection.offset + 1,
|
348
|
+
:end_num => collection.offset + collection.length,
|
349
|
+
:total_count => collection.total_entries
|
350
|
+
}, options
|
351
|
+
)
|
352
|
+
end
|
353
|
+
end
|
354
|
+
|
355
|
+
def tr8n_select_month(date, options = {}, html_options = {})
|
356
|
+
month_names = options[:use_short_month] ? Tr8n::Config.default_abbr_month_names : Tr8n::Config.default_month_names
|
357
|
+
select_month(date, options.merge(
|
358
|
+
:use_month_names => month_names.collect{|month_name| Tr8n::Language.translate(month_name, options[:description] || "Month name")}
|
359
|
+
), html_options)
|
360
|
+
end
|
361
|
+
|
362
|
+
def tr8n_with_options_tag(opts, &block)
|
363
|
+
Thread.current[:tr8n_block_options] = opts
|
364
|
+
if block_given?
|
365
|
+
ret = capture(&block)
|
366
|
+
end
|
367
|
+
Thread.current[:tr8n_block_options] = {}
|
368
|
+
ret
|
369
|
+
end
|
370
|
+
|
371
|
+
def tr8n_button_tag(label, function, opts = {})
|
372
|
+
link_to_function("<span>#{label}</span>".html_safe, function, :class => "tr8n_grey_button tr8n_pcb")
|
373
|
+
end
|
374
|
+
|
375
|
+
private
|
376
|
+
|
377
|
+
def generate_sitemap(sections, options = {})
|
378
|
+
html = "<ul class='section_list'>"
|
379
|
+
sections.each do |section|
|
380
|
+
html << "<li class='section_list_item'>"
|
381
|
+
html << "<a href='/tr8n/phrases/index?section_key=#{section.key}'>" << tr(section.label, section.description) << "</a>"
|
382
|
+
html << "<a href='" << section.data[:link] << "' target='_new'><img src='/assets/tr8n/bullet_go.png' style='border:0px; vertical-align:middle'></a>" if section.data[:link]
|
383
|
+
|
384
|
+
if section.children.size > 0
|
385
|
+
html << generate_sitemap(section.children, options)
|
386
|
+
end
|
387
|
+
html << "</li>"
|
388
|
+
end
|
389
|
+
html << "</ul>"
|
390
|
+
html.html_safe
|
391
|
+
end
|
392
|
+
|
393
|
+
end
|
394
|
+
end
|
395
|
+
end
|