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