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