@adminforth/i18n 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/custom/LanguageInUserMenu.vue +74 -0
- package/custom/LanguageUnderLogin.vue +72 -0
- package/custom/langCommon.ts +88 -0
- package/custom/node_modules/.package-lock.json +16 -0
- package/custom/node_modules/flag-icon-css/.github/dependabot.yml +8 -0
- package/custom/node_modules/flag-icon-css/.github/workflows/test.yml +17 -0
- package/custom/node_modules/flag-icon-css/.prettierignore +3 -0
- package/custom/node_modules/flag-icon-css/.prettierrc.json +20 -0
- package/custom/node_modules/flag-icon-css/404.html +6 -0
- package/custom/node_modules/flag-icon-css/CNAME +1 -0
- package/custom/node_modules/flag-icon-css/LICENSE +21 -0
- package/custom/node_modules/flag-icon-css/README.md +54 -0
- package/custom/node_modules/flag-icon-css/assets/docs.css +58 -0
- package/custom/node_modules/flag-icon-css/assets/docs.js +64 -0
- package/custom/node_modules/flag-icon-css/country.json +1857 -0
- package/custom/node_modules/flag-icon-css/css/flag-icons.css +1610 -0
- package/custom/node_modules/flag-icon-css/css/flag-icons.min.css +1 -0
- package/custom/node_modules/flag-icon-css/favicon.ico +0 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ac.svg +81 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ad.svg +148 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ae.svg +6 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/af.svg +81 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ag.svg +14 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ai.svg +763 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/al.svg +5 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/am.svg +5 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ao.svg +13 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/aq.svg +5 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ar.svg +31 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/as.svg +33 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/at.svg +6 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/au.svg +11 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/aw.svg +186 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ax.svg +18 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/az.svg +8 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ba.svg +12 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/bb.svg +6 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/bd.svg +4 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/be.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/bf.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/bg.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/bh.svg +9 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/bi.svg +15 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/bj.svg +14 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/bl.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/bm.svg +99 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/bn.svg +36 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/bo.svg +678 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/bq.svg +5 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/br.svg +45 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/bs.svg +13 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/bt.svg +89 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/bv.svg +13 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/bw.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/by.svg +22 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/bz.svg +145 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ca.svg +4 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/cc.svg +19 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/cd.svg +12 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/cf.svg +15 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/cg.svg +12 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ch.svg +9 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ci.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ck.svg +11 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/cl.svg +13 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/cm.svg +15 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/cn.svg +11 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/co.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/cp.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/cr.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/cu.svg +13 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/cv.svg +13 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/cw.svg +14 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/cx.svg +15 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/cy.svg +6 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/cz.svg +5 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/de.svg +5 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/dg.svg +140 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/dj.svg +13 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/dk.svg +5 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/dm.svg +152 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/do.svg +6745 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/dz.svg +5 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ea.svg +547 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ec.svg +138 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ee.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/eg.svg +38 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/eh.svg +16 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/er.svg +13 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/es-ct.svg +4 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/es-ga.svg +189 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/es.svg +547 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/et.svg +14 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/eu.svg +28 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/fi.svg +5 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/fj.svg +125 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/fk.svg +93 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/fm.svg +11 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/fo.svg +12 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/fr.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ga.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/gb-eng.svg +5 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/gb-nir.svg +131 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/gb-sct.svg +4 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/gb-wls.svg +9 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/gb.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/gd.svg +27 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ge.svg +6 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/gf.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/gg.svg +9 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/gh.svg +6 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/gi.svg +32 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/gl.svg +4 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/gm.svg +9 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/gn.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/gp.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/gq.svg +23 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/gr.svg +16 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/gs.svg +245 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/gt.svg +204 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/gu.svg +39 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/gw.svg +15 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/gy.svg +9 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/hk.svg +30 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/hm.svg +11 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/hn.svg +18 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/hr.svg +56 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ht.svg +116 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/hu.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ic.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/id.svg +6 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ie.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/il.svg +14 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/im.svg +36 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/in.svg +25 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/io.svg +140 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/iq.svg +10 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ir.svg +219 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/is.svg +12 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/it.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/je.svg +47 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/jm.svg +8 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/jo.svg +16 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/jp.svg +11 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ke.svg +23 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/kg.svg +15 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/kh.svg +61 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ki.svg +36 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/km.svg +16 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/kn.svg +14 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/kp.svg +15 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/kr.svg +24 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/kw.svg +13 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ky.svg +225 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/kz.svg +23 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/la.svg +12 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/lb.svg +15 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/lc.svg +8 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/li.svg +43 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/lk.svg +22 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/lr.svg +14 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ls.svg +8 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/lt.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/lu.svg +5 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/lv.svg +6 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ly.svg +13 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ma.svg +4 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/mc.svg +6 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/md.svg +71 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/me.svg +118 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/mf.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/mg.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/mh.svg +8 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/mk.svg +5 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ml.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/mm.svg +16 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/mn.svg +13 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/mo.svg +9 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/mp.svg +86 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/mq.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/mr.svg +6 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ms.svg +70 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/mt.svg +50 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/mu.svg +8 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/mv.svg +6 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/mw.svg +15 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/mx.svg +378 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/my.svg +11 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/mz.svg +21 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/na.svg +16 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/nc.svg +14 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ne.svg +6 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/nf.svg +11 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ng.svg +6 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ni.svg +129 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/nl.svg +5 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/no.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/np.svg +19 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/nr.svg +12 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/nu.svg +26 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/nz.svg +42 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/om.svg +115 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/pa.svg +13 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/pe.svg +244 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/pf.svg +18 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/pg.svg +16 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ph.svg +9 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/pk.svg +15 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/pl.svg +6 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/pm.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/pn.svg +100 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/pr.svg +13 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ps.svg +15 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/pt.svg +57 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/pw.svg +11 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/py.svg +156 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/qa.svg +4 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/re.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ro.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/rs.svg +296 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ru.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/rw.svg +13 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/sa.svg +26 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/sb.svg +13 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/sc.svg +14 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/sd.svg +13 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/se.svg +5 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/sg.svg +13 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/sh.svg +81 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/si.svg +18 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/sj.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/sk.svg +9 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/sl.svg +12 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/sm.svg +89 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/sn.svg +8 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/so.svg +11 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/sr.svg +6 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ss.svg +8 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/st.svg +16 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/sv.svg +594 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/sx.svg +56 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/sy.svg +6 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/sz.svg +45 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ta.svg +81 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/tc.svg +52 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/td.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/tf.svg +15 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/tg.svg +14 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/th.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/tj.svg +26 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/tk.svg +5 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/tl.svg +13 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/tm.svg +203 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/tn.svg +13 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/to.svg +10 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/tr.svg +8 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/tt.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/tv.svg +16 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/tw.svg +32 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/tz.svg +15 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ua.svg +6 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ug.svg +30 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/um.svg +15 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/un.svg +16 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/us.svg +10 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/uy.svg +28 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/uz.svg +30 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/va.svg +479 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/vc.svg +8 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ve.svg +26 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/vg.svg +127 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/vi.svg +28 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/vn.svg +11 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/vu.svg +18 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/wf.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ws.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/xk.svg +16 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/xx.svg +5 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/ye.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/yt.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/za.svg +17 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/zm.svg +27 -0
- package/custom/node_modules/flag-icon-css/flags/1x1/zw.svg +21 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ac.svg +76 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ad.svg +150 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ae.svg +6 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/af.svg +81 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ag.svg +14 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ai.svg +763 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/al.svg +5 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/am.svg +5 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ao.svg +13 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/aq.svg +5 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ar.svg +31 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/as.svg +33 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/at.svg +6 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/au.svg +9 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/aw.svg +186 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ax.svg +18 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/az.svg +8 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ba.svg +12 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/bb.svg +6 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/bd.svg +4 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/be.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/bf.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/bg.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/bh.svg +9 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/bi.svg +15 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/bj.svg +14 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/bl.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/bm.svg +99 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/bn.svg +36 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/bo.svg +676 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/bq.svg +5 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/br.svg +45 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/bs.svg +13 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/bt.svg +89 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/bv.svg +13 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/bw.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/by.svg +20 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/bz.svg +145 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ca.svg +4 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/cc.svg +19 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/cd.svg +5 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/cf.svg +15 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/cg.svg +12 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ch.svg +9 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ci.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ck.svg +9 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/cl.svg +13 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/cm.svg +15 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/cn.svg +11 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/co.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/cp.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/cr.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/cu.svg +13 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/cv.svg +13 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/cw.svg +14 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/cx.svg +15 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/cy.svg +6 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/cz.svg +5 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/de.svg +5 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/dg.svg +138 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/dj.svg +13 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/dk.svg +5 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/dm.svg +152 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/do.svg +6745 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/dz.svg +5 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ea.svg +544 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ec.svg +138 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ee.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/eg.svg +38 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/eh.svg +16 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/er.svg +8 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/es-ct.svg +4 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/es-ga.svg +189 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/es.svg +544 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/et.svg +14 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/eu.svg +28 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/fi.svg +5 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/fj.svg +122 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/fk.svg +90 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/fm.svg +11 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/fo.svg +12 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/fr.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ga.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/gb-eng.svg +5 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/gb-nir.svg +132 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/gb-sct.svg +4 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/gb-wls.svg +9 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/gb.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/gd.svg +27 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ge.svg +6 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/gf.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/gg.svg +9 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/gh.svg +6 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/gi.svg +32 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/gl.svg +4 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/gm.svg +14 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/gn.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/gp.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/gq.svg +23 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/gr.svg +16 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/gs.svg +242 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/gt.svg +204 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/gu.svg +39 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/gw.svg +13 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/gy.svg +9 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/hk.svg +30 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/hm.svg +9 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/hn.svg +18 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/hr.svg +58 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ht.svg +116 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/hu.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ic.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/id.svg +6 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ie.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/il.svg +14 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/im.svg +36 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/in.svg +25 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/io.svg +138 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/iq.svg +10 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ir.svg +219 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/is.svg +12 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/it.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/je.svg +47 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/jm.svg +8 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/jo.svg +16 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/jp.svg +11 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ke.svg +23 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/kg.svg +15 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/kh.svg +61 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ki.svg +36 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/km.svg +16 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/kn.svg +14 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/kp.svg +15 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/kr.svg +24 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/kw.svg +13 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ky.svg +225 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/kz.svg +23 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/la.svg +12 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/lb.svg +15 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/lc.svg +8 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/li.svg +43 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/lk.svg +22 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/lr.svg +14 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ls.svg +8 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/lt.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/lu.svg +5 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/lv.svg +6 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ly.svg +13 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ma.svg +4 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/mc.svg +6 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/md.svg +70 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/me.svg +116 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/mf.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/mg.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/mh.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/mk.svg +5 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ml.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/mm.svg +16 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/mn.svg +13 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/mo.svg +9 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/mp.svg +86 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/mq.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/mr.svg +6 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ms.svg +78 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/mt.svg +49 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/mu.svg +8 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/mv.svg +6 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/mw.svg +10 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/mx.svg +382 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/my.svg +11 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/mz.svg +21 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/na.svg +16 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/nc.svg +14 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ne.svg +6 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/nf.svg +9 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ng.svg +6 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ni.svg +129 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/nl.svg +5 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/no.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/np.svg +14 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/nr.svg +12 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/nu.svg +26 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/nz.svg +42 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/om.svg +115 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/pa.svg +14 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/pe.svg +244 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/pf.svg +19 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/pg.svg +9 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ph.svg +9 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/pk.svg +15 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/pl.svg +6 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/pm.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/pn.svg +97 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/pr.svg +13 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ps.svg +15 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/pt.svg +57 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/pw.svg +11 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/py.svg +157 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/qa.svg +4 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/re.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ro.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/rs.svg +292 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ru.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/rw.svg +13 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/sa.svg +26 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/sb.svg +13 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/sc.svg +14 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/sd.svg +13 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/se.svg +5 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/sg.svg +13 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/sh.svg +76 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/si.svg +18 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/sj.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/sk.svg +9 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/sl.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/sm.svg +91 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/sn.svg +8 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/so.svg +11 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/sr.svg +6 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ss.svg +8 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/st.svg +16 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/sv.svg +594 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/sx.svg +56 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/sy.svg +6 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/sz.svg +45 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ta.svg +76 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/tc.svg +52 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/td.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/tf.svg +15 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/tg.svg +14 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/th.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/tj.svg +22 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/tk.svg +5 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/tl.svg +13 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/tm.svg +206 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/tn.svg +13 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/to.svg +10 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/tr.svg +8 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/tt.svg +5 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/tv.svg +16 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/tw.svg +34 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/tz.svg +13 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ua.svg +6 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ug.svg +30 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/um.svg +15 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/un.svg +16 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/us.svg +10 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/uy.svg +28 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/uz.svg +30 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/va.svg +479 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/vc.svg +8 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ve.svg +26 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/vg.svg +127 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/vi.svg +28 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/vn.svg +11 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/vu.svg +18 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/wf.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ws.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/xk.svg +16 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/xx.svg +5 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/ye.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/yt.svg +7 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/za.svg +17 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/zm.svg +27 -0
- package/custom/node_modules/flag-icon-css/flags/4x3/zw.svg +21 -0
- package/custom/node_modules/flag-icon-css/flags.py +37 -0
- package/custom/node_modules/flag-icon-css/index.html +68 -0
- package/custom/node_modules/flag-icon-css/less/flag-icons-base.less +28 -0
- package/custom/node_modules/flag-icon-css/less/flag-icons-list.less +249 -0
- package/custom/node_modules/flag-icon-css/less/flag-icons-more.less +16 -0
- package/custom/node_modules/flag-icon-css/less/flag-icons.less +4 -0
- package/custom/node_modules/flag-icon-css/less/variables.less +3 -0
- package/custom/node_modules/flag-icon-css/package.json +28 -0
- package/custom/node_modules/flag-icon-css/sass/_flag-icons-base.scss +28 -0
- package/custom/node_modules/flag-icon-css/sass/_flag-icons-list.scss +273 -0
- package/custom/node_modules/flag-icon-css/sass/_variables.scss +3 -0
- package/custom/node_modules/flag-icon-css/sass/flag-icons.scss +3 -0
- package/custom/node_modules/flag-icon-css/svgo.config.js +16 -0
- package/custom/package-lock.json +24 -0
- package/custom/package.json +15 -0
- package/custom/tsconfig.json +19 -0
- package/dist/custom/LanguageInUserMenu.vue +74 -0
- package/dist/custom/LanguageUnderLogin.vue +72 -0
- package/dist/custom/ResetPassword.vue +295 -0
- package/dist/custom/ResetPasswordUnderLogin.vue +13 -0
- package/dist/custom/SignupPage.vue +278 -0
- package/dist/custom/SignupUnderLogin.vue +13 -0
- package/dist/custom/langCommon.ts +88 -0
- package/dist/custom/package-lock.json +24 -0
- package/dist/custom/package.json +15 -0
- package/dist/custom/tsconfig.json +19 -0
- package/dist/index.js +511 -0
- package/dist/types.js +1 -0
- package/index.ts +603 -0
- package/package.json +24 -0
- package/tsconfig.json +12 -0
- package/types.ts +39 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,511 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { AdminForthPlugin, Filters, suggestIfTypo, AdminForthDataTypes } from "adminforth";
|
|
11
|
+
import iso6391 from 'iso-639-1';
|
|
12
|
+
import path from 'path';
|
|
13
|
+
import fs from 'fs-extra';
|
|
14
|
+
import chokidar from 'chokidar';
|
|
15
|
+
class CachingAdapterMemory {
|
|
16
|
+
constructor() {
|
|
17
|
+
this.cache = {};
|
|
18
|
+
}
|
|
19
|
+
get(key) {
|
|
20
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
21
|
+
return this.cache[key];
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
set(key, value) {
|
|
25
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
26
|
+
this.cache[key] = value;
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
clear(key) {
|
|
30
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
31
|
+
if (this.cache[key]) {
|
|
32
|
+
delete this.cache[key];
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
class AiTranslateError extends Error {
|
|
38
|
+
constructor(message) {
|
|
39
|
+
super(message);
|
|
40
|
+
this.name = 'AiTranslateError';
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export default class I18N extends AdminForthPlugin {
|
|
44
|
+
constructor(options) {
|
|
45
|
+
super(options, import.meta.url);
|
|
46
|
+
this.options = options;
|
|
47
|
+
this.cache = new CachingAdapterMemory();
|
|
48
|
+
this.trFieldNames = {};
|
|
49
|
+
}
|
|
50
|
+
computeCompletedFieldValue(record) {
|
|
51
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
52
|
+
return this.options.supportedLanguages.reduce((acc, lang) => {
|
|
53
|
+
if (lang === 'en') {
|
|
54
|
+
return acc;
|
|
55
|
+
}
|
|
56
|
+
if (record[this.trFieldNames[lang]]) {
|
|
57
|
+
if (acc !== '') {
|
|
58
|
+
acc += '|';
|
|
59
|
+
}
|
|
60
|
+
acc += lang;
|
|
61
|
+
}
|
|
62
|
+
return acc;
|
|
63
|
+
}, '');
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
modifyResourceConfig(adminforth, resourceConfig) {
|
|
67
|
+
const _super = Object.create(null, {
|
|
68
|
+
modifyResourceConfig: { get: () => super.modifyResourceConfig }
|
|
69
|
+
});
|
|
70
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
71
|
+
var _a, _b;
|
|
72
|
+
_super.modifyResourceConfig.call(this, adminforth, resourceConfig);
|
|
73
|
+
// check each supported language is valid ISO 639-1 code
|
|
74
|
+
this.options.supportedLanguages.forEach((lang) => {
|
|
75
|
+
if (!iso6391.validate(lang)) {
|
|
76
|
+
throw new Error(`Invalid language code ${lang}, please define valid ISO 639-1 language code (2 lowercase letters)`);
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
// find primary key field
|
|
80
|
+
this.primaryKeyFieldName = (_a = resourceConfig.columns.find(c => c.primaryKey)) === null || _a === void 0 ? void 0 : _a.name;
|
|
81
|
+
if (!this.primaryKeyFieldName) {
|
|
82
|
+
throw new Error(`Primary key field not found in resource ${resourceConfig.resourceId}`);
|
|
83
|
+
}
|
|
84
|
+
// parse trFieldNames
|
|
85
|
+
for (const lang of this.options.supportedLanguages) {
|
|
86
|
+
if (lang === 'en') {
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
if ((_b = this.options.translationFieldNames) === null || _b === void 0 ? void 0 : _b[lang]) {
|
|
90
|
+
this.trFieldNames[lang] = this.options.translationFieldNames[lang];
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
this.trFieldNames[lang] = lang + '_string';
|
|
94
|
+
}
|
|
95
|
+
// find column by name
|
|
96
|
+
const column = resourceConfig.columns.find(c => c.name === this.trFieldNames[lang]);
|
|
97
|
+
if (!column) {
|
|
98
|
+
throw new Error(`Field ${this.trFieldNames[lang]} not found for storing translation for language ${lang}
|
|
99
|
+
in resource ${resourceConfig.resourceId}, consider adding it to columns or change trFieldNames option to remap it to existing column`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
this.enFieldName = this.trFieldNames['en'] || 'en_string';
|
|
103
|
+
this.fullCompleatedFieldValue = this.options.supportedLanguages.reduce((acc, lang) => {
|
|
104
|
+
if (lang === 'en') {
|
|
105
|
+
return acc;
|
|
106
|
+
}
|
|
107
|
+
if (acc !== '') {
|
|
108
|
+
acc += '|';
|
|
109
|
+
}
|
|
110
|
+
acc += lang;
|
|
111
|
+
return acc;
|
|
112
|
+
}, '');
|
|
113
|
+
// if not enFieldName column is not found, throw error
|
|
114
|
+
const enColumn = resourceConfig.columns.find(c => c.name === this.enFieldName);
|
|
115
|
+
if (!enColumn) {
|
|
116
|
+
throw new Error(`Field ${this.enFieldName} not found column to store english original string in resource ${resourceConfig.resourceId}`);
|
|
117
|
+
}
|
|
118
|
+
// if sourceFieldName defined, check it exists
|
|
119
|
+
if (this.options.sourceFieldName) {
|
|
120
|
+
if (!resourceConfig.columns.find(c => c.name === this.options.sourceFieldName)) {
|
|
121
|
+
throw new Error(`Field ${this.options.sourceFieldName} not found in resource ${resourceConfig.resourceId}`);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// if completedFieldName defined, check it exists and should be string
|
|
125
|
+
if (this.options.completedFieldName) {
|
|
126
|
+
const column = resourceConfig.columns.find(c => c.name === this.options.completedFieldName);
|
|
127
|
+
if (!column) {
|
|
128
|
+
const similar = suggestIfTypo(resourceConfig.columns.map((col) => col.name), this.options.completedFieldName);
|
|
129
|
+
throw new Error(`Field ${this.options.completedFieldName} not found in resource ${resourceConfig.resourceId}${similar ? `Did you mean '${similar}'?` : ''}`);
|
|
130
|
+
}
|
|
131
|
+
// if showIn is not defined, add it as empty
|
|
132
|
+
column.showIn = [];
|
|
133
|
+
// add virtual field for incomplete
|
|
134
|
+
resourceConfig.columns.push({
|
|
135
|
+
name: 'fully_translated',
|
|
136
|
+
label: 'Fully translated',
|
|
137
|
+
virtual: true,
|
|
138
|
+
showIn: ['list', 'show', 'filter'],
|
|
139
|
+
type: AdminForthDataTypes.BOOLEAN,
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
const compMeta = {
|
|
143
|
+
brandSlug: adminforth.config.customization.brandNameSlug,
|
|
144
|
+
pluginInstanceId: this.pluginInstanceId,
|
|
145
|
+
supportedLanguages: this.options.supportedLanguages.map(lang => ({
|
|
146
|
+
code: lang,
|
|
147
|
+
// lang name on on language native name
|
|
148
|
+
name: iso6391.getNativeName(lang),
|
|
149
|
+
}))
|
|
150
|
+
};
|
|
151
|
+
// add underLogin component
|
|
152
|
+
(adminforth.config.customization.loginPageInjections.underInputs).push({
|
|
153
|
+
file: this.componentPath('LanguageUnderLogin.vue'),
|
|
154
|
+
meta: compMeta
|
|
155
|
+
});
|
|
156
|
+
(adminforth.config.customization.globalInjections.userMenu).push({
|
|
157
|
+
file: this.componentPath('LanguageInUserMenu.vue'),
|
|
158
|
+
meta: compMeta
|
|
159
|
+
});
|
|
160
|
+
// disable create allowedActions for translations
|
|
161
|
+
resourceConfig.options.allowedActions.create = false;
|
|
162
|
+
// add hook on edit of any translation
|
|
163
|
+
resourceConfig.hooks.edit.afterSave.push((_c) => __awaiter(this, [_c], void 0, function* ({ record, oldRecord }) {
|
|
164
|
+
if (oldRecord) {
|
|
165
|
+
// find lang which changed
|
|
166
|
+
let langsChanged = [];
|
|
167
|
+
for (const lang of this.options.supportedLanguages) {
|
|
168
|
+
if (lang === 'en') {
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
if (record[this.trFieldNames[lang]] !== oldRecord[this.trFieldNames[lang]]) {
|
|
172
|
+
langsChanged.push(lang);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
// clear frontend cache for all langsChanged
|
|
176
|
+
for (const lang of langsChanged) {
|
|
177
|
+
this.cache.clear(`${this.resourceConfig.resourceId}:frontend:${lang}`);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
// clear frontend cache for all lan
|
|
181
|
+
return { ok: true };
|
|
182
|
+
}));
|
|
183
|
+
if (this.options.completedFieldName) {
|
|
184
|
+
// on show and list add a list hook which will add incomplete field to record if translation is missing for at least one language
|
|
185
|
+
const addIncompleteField = (record) => {
|
|
186
|
+
// form list of all langs, sorted by alphabet, without en, to get 'al|ro|uk'
|
|
187
|
+
record.fully_translated = this.fullCompleatedFieldValue === record[this.options.completedFieldName];
|
|
188
|
+
};
|
|
189
|
+
resourceConfig.hooks.list.afterDatasourceResponse.push((_d) => __awaiter(this, [_d], void 0, function* ({ response }) {
|
|
190
|
+
response.forEach(addIncompleteField);
|
|
191
|
+
return { ok: true };
|
|
192
|
+
}));
|
|
193
|
+
resourceConfig.hooks.show.afterDatasourceResponse.push((_e) => __awaiter(this, [_e], void 0, function* ({ response }) {
|
|
194
|
+
addIncompleteField(response.length && response[0]);
|
|
195
|
+
return { ok: true };
|
|
196
|
+
}));
|
|
197
|
+
// also add edit hook beforeSave to update completedFieldName
|
|
198
|
+
resourceConfig.hooks.edit.beforeSave.push((_f) => __awaiter(this, [_f], void 0, function* ({ record, oldRecord }) {
|
|
199
|
+
const futureRecord = Object.assign(Object.assign({}, oldRecord), record);
|
|
200
|
+
const futureCompletedFieldValue = yield this.computeCompletedFieldValue(futureRecord);
|
|
201
|
+
record[this.options.completedFieldName] = futureCompletedFieldValue;
|
|
202
|
+
return { ok: true };
|
|
203
|
+
}));
|
|
204
|
+
// add list hook to support filtering by fully_translated virtual field
|
|
205
|
+
resourceConfig.hooks.list.beforeDatasourceRequest.push((_g) => __awaiter(this, [_g], void 0, function* ({ query }) {
|
|
206
|
+
if (!query.filters || query.filters.length === 0) {
|
|
207
|
+
query.filters = [];
|
|
208
|
+
}
|
|
209
|
+
// get fully_translated field from filter if it is there
|
|
210
|
+
const fullyTranslatedFilter = query.filters.find((f) => f.field === 'fully_translated');
|
|
211
|
+
if (fullyTranslatedFilter) {
|
|
212
|
+
// remove it from filters because it is virtual field
|
|
213
|
+
query.filters = query.filters.filter((f) => f.field !== 'fully_translated');
|
|
214
|
+
if (fullyTranslatedFilter.value[0]) {
|
|
215
|
+
query.filters.push({
|
|
216
|
+
field: this.options.completedFieldName,
|
|
217
|
+
value: this.fullCompleatedFieldValue,
|
|
218
|
+
operator: 'eq',
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
query.filters.push({
|
|
223
|
+
field: this.options.completedFieldName,
|
|
224
|
+
value: this.fullCompleatedFieldValue,
|
|
225
|
+
operator: 'ne',
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
return { ok: true };
|
|
230
|
+
}));
|
|
231
|
+
}
|
|
232
|
+
// add bulk action
|
|
233
|
+
if (!resourceConfig.options.bulkActions) {
|
|
234
|
+
resourceConfig.options.bulkActions = [];
|
|
235
|
+
}
|
|
236
|
+
if (this.options.completeAdapter) {
|
|
237
|
+
resourceConfig.options.bulkActions.push({
|
|
238
|
+
label: 'Translate selected',
|
|
239
|
+
icon: 'flowbite:language-outline',
|
|
240
|
+
// if optional `confirm` is provided, user will be asked to confirm action
|
|
241
|
+
confirm: 'Are you sure you want to translate selected items?',
|
|
242
|
+
state: 'selected',
|
|
243
|
+
action: (_h) => __awaiter(this, [_h], void 0, function* ({ selectedIds, tr }) {
|
|
244
|
+
try {
|
|
245
|
+
yield this.bulkTranslate({ selectedIds });
|
|
246
|
+
}
|
|
247
|
+
catch (e) {
|
|
248
|
+
if (e instanceof AiTranslateError) {
|
|
249
|
+
return { ok: false, error: e.message };
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
return {
|
|
253
|
+
ok: true, error: undefined,
|
|
254
|
+
successMessage: yield tr(`Translated {count} items`, 'frontend', { count: selectedIds.length }),
|
|
255
|
+
};
|
|
256
|
+
})
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
;
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
bulkTranslate(_a) {
|
|
263
|
+
return __awaiter(this, arguments, void 0, function* ({ selectedIds }) {
|
|
264
|
+
const needToTranslateByLang = {};
|
|
265
|
+
const translations = yield this.adminforth.resource(this.resourceConfig.resourceId).list(Filters.IN(this.primaryKeyFieldName, selectedIds));
|
|
266
|
+
for (const lang of this.options.supportedLanguages) {
|
|
267
|
+
if (lang === 'en') {
|
|
268
|
+
// all strings are in English, no need to translate
|
|
269
|
+
continue;
|
|
270
|
+
}
|
|
271
|
+
for (const translation of translations) {
|
|
272
|
+
if (!translation[this.trFieldNames[lang]]) {
|
|
273
|
+
if (!needToTranslateByLang[lang]) {
|
|
274
|
+
needToTranslateByLang[lang] = [];
|
|
275
|
+
}
|
|
276
|
+
needToTranslateByLang[lang].push({
|
|
277
|
+
'en_string': translation[this.enFieldName],
|
|
278
|
+
category: translation[this.options.categoryFieldName],
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
const maxKeysInOneReq = 10;
|
|
284
|
+
const updateStrings = {};
|
|
285
|
+
const translateToLang = (langIsoCode, strings) => __awaiter(this, void 0, void 0, function* () {
|
|
286
|
+
if (strings.length > maxKeysInOneReq) {
|
|
287
|
+
for (let i = 0; i < strings.length; i += maxKeysInOneReq) {
|
|
288
|
+
const slicedStrings = strings.slice(i, i + maxKeysInOneReq);
|
|
289
|
+
yield translateToLang(langIsoCode, slicedStrings);
|
|
290
|
+
}
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
293
|
+
const lang = langIsoCode;
|
|
294
|
+
const prompt = `
|
|
295
|
+
I need to translate strings in JSON to ${lang} language from English for my web app.
|
|
296
|
+
Keep keys, as is, write translation into values! Here are the strings:
|
|
297
|
+
|
|
298
|
+
\`\`\`json
|
|
299
|
+
${JSON.stringify(strings.reduce((acc, s) => {
|
|
300
|
+
acc[s.en_string] = '';
|
|
301
|
+
return acc;
|
|
302
|
+
}, {}), null, 2)}
|
|
303
|
+
\`\`\`
|
|
304
|
+
`;
|
|
305
|
+
// call OpenAI
|
|
306
|
+
const resp = yield this.options.completeAdapter.complete(prompt, [], 300);
|
|
307
|
+
if (resp.error) {
|
|
308
|
+
throw new AiTranslateError(resp.error);
|
|
309
|
+
}
|
|
310
|
+
// parse response like
|
|
311
|
+
// Here are the translations for the strings you provided:
|
|
312
|
+
// ```json
|
|
313
|
+
// [{"live": "canlı"}, {"Table Games": "Masa Oyunları"}]
|
|
314
|
+
// ```
|
|
315
|
+
let res;
|
|
316
|
+
try {
|
|
317
|
+
res = resp.content.split("```json")[1].split("```")[0];
|
|
318
|
+
}
|
|
319
|
+
catch (e) {
|
|
320
|
+
console.error('error in parsing OpenAI', resp);
|
|
321
|
+
return;
|
|
322
|
+
}
|
|
323
|
+
res = JSON.parse(res);
|
|
324
|
+
for (const [enStr, translatedStr] of Object.entries(res)) {
|
|
325
|
+
const translationsTargeted = translations.filter(t => t[this.enFieldName] === enStr);
|
|
326
|
+
// might be several with same en_string
|
|
327
|
+
for (const translation of translationsTargeted) {
|
|
328
|
+
translation[this.trFieldNames[lang]] = translatedStr;
|
|
329
|
+
// process.env.HEAVY_DEBUG && console.log(`🪲translated to ${lang} ${translation.en_string}, ${translatedStr}`)
|
|
330
|
+
if (!updateStrings[enStr]) {
|
|
331
|
+
updateStrings[enStr] = {
|
|
332
|
+
updates: {},
|
|
333
|
+
category: translation[this.options.categoryFieldName],
|
|
334
|
+
strId: translation[this.primaryKeyFieldName],
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
updateStrings[enStr].updates[this.trFieldNames[lang]] = translatedStr;
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
});
|
|
341
|
+
const langsInvolved = new Set(Object.keys(needToTranslateByLang));
|
|
342
|
+
yield Promise.all(Object.entries(needToTranslateByLang).map((_b) => __awaiter(this, [_b], void 0, function* ([lang, strings]) {
|
|
343
|
+
yield translateToLang(lang, strings);
|
|
344
|
+
})));
|
|
345
|
+
yield Promise.all(Object.entries(updateStrings).map((_c) => __awaiter(this, [_c], void 0, function* ([_, { updates, strId }]) {
|
|
346
|
+
// because this will translate all languages, we can set completedLangs to all languages
|
|
347
|
+
const futureCompletedFieldValue = this.fullCompleatedFieldValue;
|
|
348
|
+
yield this.adminforth.resource(this.resourceConfig.resourceId).update(strId, Object.assign(Object.assign({}, updates), { [this.options.completedFieldName]: futureCompletedFieldValue }));
|
|
349
|
+
})));
|
|
350
|
+
for (const lang of langsInvolved) {
|
|
351
|
+
this.cache.clear(`${this.resourceConfig.resourceId}:frontend:${lang}`);
|
|
352
|
+
for (const [enStr, { category }] of Object.entries(updateStrings)) {
|
|
353
|
+
this.cache.clear(`${this.resourceConfig.resourceId}:${category}:${lang}:${enStr}`);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
processExtractedMessages(adminforth, filePath) {
|
|
359
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
360
|
+
// messages file is in i18n-messages.json
|
|
361
|
+
let messages;
|
|
362
|
+
try {
|
|
363
|
+
messages = yield fs.readJson(filePath);
|
|
364
|
+
process.env.HEAVY_DEBUG && console.info('🐛 Messages file found');
|
|
365
|
+
}
|
|
366
|
+
catch (e) {
|
|
367
|
+
process.env.HEAVY_DEBUG && console.error('🐛 Messages file not yet exists, probably npm run i18n:extract not finished/started yet, might be ok');
|
|
368
|
+
return;
|
|
369
|
+
}
|
|
370
|
+
// loop over missingKeys[i].path and add them to database if not exists
|
|
371
|
+
yield Promise.all(messages.missingKeys.map((missingKey) => __awaiter(this, void 0, void 0, function* () {
|
|
372
|
+
const key = missingKey.path;
|
|
373
|
+
const file = missingKey.file;
|
|
374
|
+
const category = 'frontend';
|
|
375
|
+
const exists = yield adminforth.resource(this.resourceConfig.resourceId).count(Filters.EQ(this.enFieldName, key));
|
|
376
|
+
if (exists) {
|
|
377
|
+
return;
|
|
378
|
+
}
|
|
379
|
+
const record = Object.assign({ [this.enFieldName]: key, [this.options.categoryFieldName]: category }, (this.options.sourceFieldName ? { [this.options.sourceFieldName]: file } : {}));
|
|
380
|
+
try {
|
|
381
|
+
yield adminforth.resource(this.resourceConfig.resourceId).create(record);
|
|
382
|
+
}
|
|
383
|
+
catch (e) {
|
|
384
|
+
console.error('🐛 Error creating record', e);
|
|
385
|
+
}
|
|
386
|
+
})));
|
|
387
|
+
});
|
|
388
|
+
}
|
|
389
|
+
tryProcessAndWatch(adminforth) {
|
|
390
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
391
|
+
const spaDir = adminforth.codeInjector.spaTmpPath();
|
|
392
|
+
// messages file is in i18n-messages.json
|
|
393
|
+
const messagesFile = path.join(spaDir, '..', 'spa_tmp', 'i18n-messages.json');
|
|
394
|
+
console.log('🪲messagesFile', messagesFile);
|
|
395
|
+
this.processExtractedMessages(adminforth, messagesFile);
|
|
396
|
+
// we use watcher because file can't be yet created when we start - bundleNow can be done in build time or can be done now
|
|
397
|
+
// that is why we make attempt to process it now and then watch for changes
|
|
398
|
+
const w = chokidar.watch(messagesFile, { persistent: true });
|
|
399
|
+
w.on('change', () => {
|
|
400
|
+
this.processExtractedMessages(adminforth, messagesFile);
|
|
401
|
+
});
|
|
402
|
+
w.on('add', () => {
|
|
403
|
+
this.processExtractedMessages(adminforth, messagesFile);
|
|
404
|
+
});
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
validateConfigAfterDiscover(adminforth, resourceConfig) {
|
|
408
|
+
// optional method where you can safely check field types after database discovery was performed
|
|
409
|
+
// ensure each trFieldName (apart from enFieldName) is nullable column of type string
|
|
410
|
+
for (const lang of this.options.supportedLanguages) {
|
|
411
|
+
if (lang === 'en') {
|
|
412
|
+
continue;
|
|
413
|
+
}
|
|
414
|
+
const column = resourceConfig.columns.find(c => c.name === this.trFieldNames[lang]);
|
|
415
|
+
if (!column) {
|
|
416
|
+
throw new Error(`Field ${this.trFieldNames[lang]} not found for storing translation for language ${lang}
|
|
417
|
+
in resource ${resourceConfig.resourceId}, consider adding it to columns or change trFieldNames option to remap it to existing column`);
|
|
418
|
+
}
|
|
419
|
+
if (column.required.create || column.required.edit) {
|
|
420
|
+
throw new Error(`Field ${this.trFieldNames[lang]} should be not required in resource ${resourceConfig.resourceId}`);
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
// ensure categoryFieldName defined and is string
|
|
424
|
+
if (!this.options.categoryFieldName) {
|
|
425
|
+
throw new Error(`categoryFieldName option is not defined. It is used to categorize translations and return only specific category e.g. to frontend`);
|
|
426
|
+
}
|
|
427
|
+
const categoryColumn = resourceConfig.columns.find(c => c.name === this.options.categoryFieldName);
|
|
428
|
+
if (!categoryColumn) {
|
|
429
|
+
throw new Error(`Field ${this.options.categoryFieldName} not found in resource ${resourceConfig.resourceId}`);
|
|
430
|
+
}
|
|
431
|
+
if (categoryColumn.type !== AdminForthDataTypes.STRING && categoryColumn.type !== AdminForthDataTypes.TEXT) {
|
|
432
|
+
throw new Error(`Field ${this.options.categoryFieldName} should be of type string in resource ${resourceConfig.resourceId}, but it is ${categoryColumn.type}`);
|
|
433
|
+
}
|
|
434
|
+
// in this plugin we will use plugin to fill the database with missing language messages
|
|
435
|
+
this.tryProcessAndWatch(adminforth);
|
|
436
|
+
adminforth.tr = (msg, category, lang, params) => __awaiter(this, void 0, void 0, function* () {
|
|
437
|
+
// console.log('🪲tr', msg, category, lang);
|
|
438
|
+
// if lang is not supported , throw
|
|
439
|
+
if (!this.options.supportedLanguages.includes(lang)) {
|
|
440
|
+
throw new Error(`Language ${lang} is not entered to be supported by requested by browser in request headers accept-language`);
|
|
441
|
+
}
|
|
442
|
+
let result;
|
|
443
|
+
// try to get translation from cache
|
|
444
|
+
const cacheKey = `${resourceConfig.resourceId}:${category}:${lang}:${msg}`;
|
|
445
|
+
const cached = yield this.cache.get(cacheKey);
|
|
446
|
+
if (cached) {
|
|
447
|
+
result = cached;
|
|
448
|
+
}
|
|
449
|
+
if (!result) {
|
|
450
|
+
const resource = adminforth.resource(resourceConfig.resourceId);
|
|
451
|
+
const translation = yield resource.get([Filters.EQ(this.enFieldName, msg), Filters.EQ(this.options.categoryFieldName, category)]);
|
|
452
|
+
if (!translation) {
|
|
453
|
+
yield resource.create({
|
|
454
|
+
[this.enFieldName]: msg,
|
|
455
|
+
[this.options.categoryFieldName]: category,
|
|
456
|
+
});
|
|
457
|
+
}
|
|
458
|
+
// do this check here, to faster register missing translations
|
|
459
|
+
// also not cache it - no sense to cache english strings
|
|
460
|
+
if (lang === 'en') {
|
|
461
|
+
// set to cache to return faster next time
|
|
462
|
+
result = msg;
|
|
463
|
+
}
|
|
464
|
+
else {
|
|
465
|
+
result = translation === null || translation === void 0 ? void 0 : translation[this.trFieldNames[lang]];
|
|
466
|
+
if (!result) {
|
|
467
|
+
// return english
|
|
468
|
+
result = msg;
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
// cache so even if key does not exist, we will not hit database
|
|
472
|
+
yield this.cache.set(cacheKey, result);
|
|
473
|
+
}
|
|
474
|
+
if (params) {
|
|
475
|
+
for (const [key, value] of Object.entries(params)) {
|
|
476
|
+
result = result.replace(`{${key}}`, value);
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
return result;
|
|
480
|
+
});
|
|
481
|
+
}
|
|
482
|
+
instanceUniqueRepresentation(pluginOptions) {
|
|
483
|
+
// optional method to return unique string representation of plugin instance.
|
|
484
|
+
// Needed if plugin can have multiple instances on one resource
|
|
485
|
+
return `single`;
|
|
486
|
+
}
|
|
487
|
+
setupEndpoints(server) {
|
|
488
|
+
server.endpoint({
|
|
489
|
+
method: 'GET',
|
|
490
|
+
path: `/plugin/${this.pluginInstanceId}/frontend_messages`,
|
|
491
|
+
noAuth: true,
|
|
492
|
+
handler: (_a) => __awaiter(this, [_a], void 0, function* ({ query }) {
|
|
493
|
+
const lang = query.lang;
|
|
494
|
+
// form map of translations
|
|
495
|
+
const resource = this.adminforth.resource(this.resourceConfig.resourceId);
|
|
496
|
+
const cacheKey = `${this.resourceConfig.resourceId}:frontend:${lang}`;
|
|
497
|
+
const cached = yield this.cache.get(cacheKey);
|
|
498
|
+
if (cached) {
|
|
499
|
+
return cached;
|
|
500
|
+
}
|
|
501
|
+
const translations = {};
|
|
502
|
+
const allTranslations = yield resource.list([Filters.EQ(this.options.categoryFieldName, 'frontend')]);
|
|
503
|
+
for (const tr of allTranslations) {
|
|
504
|
+
translations[tr[this.enFieldName]] = tr[this.trFieldNames[lang]];
|
|
505
|
+
}
|
|
506
|
+
yield this.cache.set(cacheKey, translations);
|
|
507
|
+
return translations;
|
|
508
|
+
})
|
|
509
|
+
});
|
|
510
|
+
}
|
|
511
|
+
}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|