├── tests ├── _data │ └── .gitkeep ├── _output │ └── .gitignore ├── _support │ ├── _generated │ │ └── .gitignore │ ├── Helper │ │ ├── Unit.php │ │ ├── Acceptance.php │ │ └── Functional.php │ ├── UnitTester.php │ ├── AcceptanceTester.php │ └── FunctionalTester.php ├── functional │ ├── Feature_SearchCept.php │ ├── Page_SitemapCept.php │ ├── Feature_InsertTagCept.php │ ├── Page_SpecialCept.php │ ├── Feature_BreadcrumbCept.php │ ├── Page_StandardCept.php │ └── Page_HomeCept.php └── functional.suite.yml ├── src ├── Resources │ ├── config │ │ └── services.yml │ ├── contao │ │ ├── templates │ │ │ ├── mod_i18nl10n_article_empty.html5 │ │ │ ├── mod_i18nl10n_nav.html5 │ │ │ ├── mod_search_i18nl10n.html5 │ │ │ ├── lang_select.html5 │ │ │ ├── lang_default.html5 │ │ │ ├── nav_l10n.html5 │ │ │ └── nav_i18nl10n.html5 │ │ ├── languages │ │ │ ├── de │ │ │ │ ├── tl_article.php │ │ │ │ ├── tl_user.php │ │ │ │ ├── tl_user_group.php │ │ │ │ ├── tl_content.php │ │ │ │ ├── modules.php │ │ │ │ ├── default.php │ │ │ │ ├── tl_module.php │ │ │ │ ├── tl_page.php │ │ │ │ └── tl_page_i18nl10n.php │ │ │ ├── en │ │ │ │ ├── tl_article.php │ │ │ │ ├── tl_user.php │ │ │ │ ├── tl_user_group.php │ │ │ │ ├── tl_content.php │ │ │ │ ├── modules.php │ │ │ │ ├── default.php │ │ │ │ ├── tl_module.php │ │ │ │ ├── tl_page.php │ │ │ │ └── tl_page_i18nl10n.php │ │ │ └── fr │ │ │ │ ├── tl_article.php │ │ │ │ ├── tl_user.php │ │ │ │ ├── tl_user_group.php │ │ │ │ ├── tl_content.php │ │ │ │ ├── modules.php │ │ │ │ ├── default.php │ │ │ │ ├── tl_module.php │ │ │ │ ├── tl_page.php │ │ │ │ └── tl_page_i18nl10n.php │ │ ├── dca │ │ │ ├── tl_files.php │ │ │ ├── tl_user_group.php │ │ │ ├── tl_user.php │ │ │ ├── tl_module.php │ │ │ └── tl_article.php │ │ ├── widgets │ │ │ └── I18nl10nMetaWizard.php │ │ └── config │ │ │ └── config.php │ └── public │ │ ├── img │ │ ├── article.gif │ │ ├── i18nl10n.png │ │ ├── localize_all.png │ │ ├── flag_icons │ │ │ ├── ad.png │ │ │ ├── ae.png │ │ │ ├── af.png │ │ │ ├── ag.png │ │ │ ├── ai.png │ │ │ ├── al.png │ │ │ ├── am.png │ │ │ ├── an.png │ │ │ ├── ao.png │ │ │ ├── ar.png │ │ │ ├── as.png │ │ │ ├── at.png │ │ │ ├── au.png │ │ │ ├── aw.png │ │ │ ├── ax.png │ │ │ ├── az.png │ │ │ ├── ba.png │ │ │ ├── bb.png │ │ │ ├── bd.png │ │ │ ├── be.png │ │ │ ├── bf.png │ │ │ ├── bg.png │ │ │ ├── bh.png │ │ │ ├── bi.png │ │ │ ├── bj.png │ │ │ ├── bm.png │ │ │ ├── bn.png │ │ │ ├── bo.png │ │ │ ├── br.png │ │ │ ├── bs.png │ │ │ ├── bt.png │ │ │ ├── bv.png │ │ │ ├── bw.png │ │ │ ├── by.png │ │ │ ├── bz.png │ │ │ ├── ca.png │ │ │ ├── cc.png │ │ │ ├── cd.png │ │ │ ├── cf.png │ │ │ ├── cg.png │ │ │ ├── ch.png │ │ │ ├── ci.png │ │ │ ├── ck.png │ │ │ ├── cl.png │ │ │ ├── cm.png │ │ │ ├── cn.png │ │ │ ├── co.png │ │ │ ├── cr.png │ │ │ ├── cs.png │ │ │ ├── cu.png │ │ │ ├── cv.png │ │ │ ├── cx.png │ │ │ ├── cy.png │ │ │ ├── cz.png │ │ │ ├── de.png │ │ │ ├── dj.png │ │ │ ├── dk.png │ │ │ ├── dm.png │ │ │ ├── do.png │ │ │ ├── dz.png │ │ │ ├── ec.png │ │ │ ├── ee.png │ │ │ ├── eg.png │ │ │ ├── eh.png │ │ │ ├── el.png │ │ │ ├── en.png │ │ │ ├── er.png │ │ │ ├── es.png │ │ │ ├── et.png │ │ │ ├── eu.png │ │ │ ├── fam.png │ │ │ ├── fi.png │ │ │ ├── fj.png │ │ │ ├── fk.png │ │ │ ├── fm.png │ │ │ ├── fo.png │ │ │ ├── fr.png │ │ │ ├── ga.png │ │ │ ├── gb.png │ │ │ ├── gd.png │ │ │ ├── ge.png │ │ │ ├── gf.png │ │ │ ├── gg.png │ │ │ ├── gh.png │ │ │ ├── gi.png │ │ │ ├── gl.png │ │ │ ├── gm.png │ │ │ ├── gn.png │ │ │ ├── gp.png │ │ │ ├── gq.png │ │ │ ├── gr.png │ │ │ ├── gs.png │ │ │ ├── gt.png │ │ │ ├── gu.png │ │ │ ├── gw.png │ │ │ ├── gy.png │ │ │ ├── hk.png │ │ │ ├── hm.png │ │ │ ├── hn.png │ │ │ ├── hr.png │ │ │ ├── ht.png │ │ │ ├── hu.png │ │ │ ├── id.png │ │ │ ├── ie.png │ │ │ ├── il.png │ │ │ ├── im.png │ │ │ ├── in.png │ │ │ ├── io.png │ │ │ ├── iq.png │ │ │ ├── ir.png │ │ │ ├── is.png │ │ │ ├── it.png │ │ │ ├── ja.png │ │ │ ├── je.png │ │ │ ├── jm.png │ │ │ ├── jo.png │ │ │ ├── jp.png │ │ │ ├── ke.png │ │ │ ├── kg.png │ │ │ ├── kh.png │ │ │ ├── ki.png │ │ │ ├── km.png │ │ │ ├── kn.png │ │ │ ├── kp.png │ │ │ ├── kr.png │ │ │ ├── kw.png │ │ │ ├── ky.png │ │ │ ├── kz.png │ │ │ ├── la.png │ │ │ ├── lb.png │ │ │ ├── lc.png │ │ │ ├── li.png │ │ │ ├── lk.png │ │ │ ├── lr.png │ │ │ ├── ls.png │ │ │ ├── lt.png │ │ │ ├── lu.png │ │ │ ├── lv.png │ │ │ ├── ly.png │ │ │ ├── ma.png │ │ │ ├── mc.png │ │ │ ├── md.png │ │ │ ├── me.png │ │ │ ├── mf.png │ │ │ ├── mg.png │ │ │ ├── mh.png │ │ │ ├── mk.png │ │ │ ├── ml.png │ │ │ ├── mm.png │ │ │ ├── mn.png │ │ │ ├── mo.png │ │ │ ├── mp.png │ │ │ ├── mq.png │ │ │ ├── mr.png │ │ │ ├── ms.png │ │ │ ├── mt.png │ │ │ ├── mu.png │ │ │ ├── mv.png │ │ │ ├── mw.png │ │ │ ├── mx.png │ │ │ ├── my.png │ │ │ ├── mz.png │ │ │ ├── na.png │ │ │ ├── nc.png │ │ │ ├── nc2.png │ │ │ ├── ne.png │ │ │ ├── nf.png │ │ │ ├── ng.png │ │ │ ├── ni.png │ │ │ ├── nl.png │ │ │ ├── no.png │ │ │ ├── np.png │ │ │ ├── nr.png │ │ │ ├── nu.png │ │ │ ├── nz.png │ │ │ ├── om.png │ │ │ ├── pa.png │ │ │ ├── pe.png │ │ │ ├── pf.png │ │ │ ├── pg.png │ │ │ ├── ph.png │ │ │ ├── pk.png │ │ │ ├── pl.png │ │ │ ├── pm.png │ │ │ ├── pn.png │ │ │ ├── pr.png │ │ │ ├── ps.png │ │ │ ├── pt.png │ │ │ ├── pw.png │ │ │ ├── py.png │ │ │ ├── qa.png │ │ │ ├── re.png │ │ │ ├── ro.png │ │ │ ├── rs.png │ │ │ ├── ru.png │ │ │ ├── rw.png │ │ │ ├── sa.png │ │ │ ├── sb.png │ │ │ ├── sc.png │ │ │ ├── sd.png │ │ │ ├── se.png │ │ │ ├── sg.png │ │ │ ├── sh.png │ │ │ ├── si.png │ │ │ ├── sj.png │ │ │ ├── sk.png │ │ │ ├── sl.png │ │ │ ├── sm.png │ │ │ ├── sn.png │ │ │ ├── so.png │ │ │ ├── sr.png │ │ │ ├── st.png │ │ │ ├── sv.png │ │ │ ├── sy.png │ │ │ ├── sz.png │ │ │ ├── tc.png │ │ │ ├── td.png │ │ │ ├── tf.png │ │ │ ├── tg.png │ │ │ ├── th.png │ │ │ ├── tj.png │ │ │ ├── tk.png │ │ │ ├── tl.png │ │ │ ├── tm.png │ │ │ ├── tn.png │ │ │ ├── to.png │ │ │ ├── tr.png │ │ │ ├── tt.png │ │ │ ├── tv.png │ │ │ ├── tw.png │ │ │ ├── tz.png │ │ │ ├── ua.png │ │ │ ├── ug.png │ │ │ ├── um.png │ │ │ ├── us.png │ │ │ ├── uy.png │ │ │ ├── uz.png │ │ │ ├── va.png │ │ │ ├── vc.png │ │ │ ├── ve.png │ │ │ ├── vg.png │ │ │ ├── vi.png │ │ │ ├── vn.png │ │ │ ├── vu.png │ │ │ ├── wf.png │ │ │ ├── ws.png │ │ │ ├── ye.png │ │ │ ├── yt.png │ │ │ ├── za.png │ │ │ ├── zh.png │ │ │ ├── zm.png │ │ │ ├── zw.png │ │ │ ├── af_ZA.png │ │ │ ├── am_ET.png │ │ │ ├── ar_AE.png │ │ │ ├── ar_BH.png │ │ │ ├── ar_DZ.png │ │ │ ├── ar_EG.png │ │ │ ├── ar_IQ.png │ │ │ ├── ar_JO.png │ │ │ ├── ar_KW.png │ │ │ ├── ar_LB.png │ │ │ ├── ar_LY.png │ │ │ ├── ar_MA.png │ │ │ ├── ar_OM.png │ │ │ ├── ar_QA.png │ │ │ ├── ar_SA.png │ │ │ ├── ar_SY.png │ │ │ ├── ar_TN.png │ │ │ ├── ar_YE.png │ │ │ ├── as_IN.png │ │ │ ├── az_AZ.png │ │ │ ├── bn_ID.png │ │ │ ├── bs_BA.png │ │ │ ├── ca_ES.png │ │ │ ├── cs_CZ.png │ │ │ ├── da_DK.png │ │ │ ├── de_AT.png │ │ │ ├── de_CH.png │ │ │ ├── de_DE.png │ │ │ ├── de_LI.png │ │ │ ├── de_LU.png │ │ │ ├── dz_BT.png │ │ │ ├── el_GR.png │ │ │ ├── en_AU.png │ │ │ ├── en_BZ.png │ │ │ ├── en_CA.png │ │ │ ├── en_GB.png │ │ │ ├── en_IE.png │ │ │ ├── en_IN.png │ │ │ ├── en_JM.png │ │ │ ├── en_NZ.png │ │ │ ├── en_PH.png │ │ │ ├── en_TT.png │ │ │ ├── en_US.png │ │ │ ├── en_ZA.png │ │ │ ├── es_AR.png │ │ │ ├── es_BO.png │ │ │ ├── es_CL.png │ │ │ ├── es_CO.png │ │ │ ├── es_CR.png │ │ │ ├── es_DO.png │ │ │ ├── es_EC.png │ │ │ ├── es_ES.png │ │ │ ├── es_GT.png │ │ │ ├── es_HN.png │ │ │ ├── es_MX.png │ │ │ ├── es_NI.png │ │ │ ├── es_PA.png │ │ │ ├── es_PE.png │ │ │ ├── es_PR.png │ │ │ ├── es_PY.png │ │ │ ├── es_SV.png │ │ │ ├── es_UY.png │ │ │ ├── es_VE.png │ │ │ ├── fr_BE.png │ │ │ ├── fr_CA.png │ │ │ ├── fr_CH.png │ │ │ ├── fr_FR.png │ │ │ ├── fr_LU.png │ │ │ ├── fy_NL.png │ │ │ ├── gd_IE.png │ │ │ ├── hr_HR.png │ │ │ ├── hy_AM.png │ │ │ ├── id_ID.png │ │ │ ├── is_IS.png │ │ │ ├── it_CH.png │ │ │ ├── it_IT.png │ │ │ ├── ka_GE.png │ │ │ ├── lv_LV.png │ │ │ ├── ms_BN.png │ │ │ ├── ms_MY.png │ │ │ ├── mt_MT.png │ │ │ ├── nl_BE.png │ │ │ ├── nl_NL.png │ │ │ ├── no_NO.png │ │ │ ├── pa_IN.png │ │ │ ├── pt_BR.png │ │ │ ├── pt_PT.png │ │ │ ├── ro_MO.png │ │ │ ├── ro_RO.png │ │ │ ├── ru_MO.png │ │ │ ├── ru_RU.png │ │ │ ├── sk_SK.png │ │ │ ├── sq_AL.png │ │ │ ├── sr_RS.png │ │ │ ├── sr_SP.png │ │ │ ├── sv_FI.png │ │ │ ├── sv_SE.png │ │ │ ├── tr_TR.png │ │ │ ├── uk_UA.png │ │ │ ├── ur_PK.png │ │ │ ├── uz_UZ.png │ │ │ ├── vi_VN.png │ │ │ ├── wales.png │ │ │ ├── wo_SN.png │ │ │ ├── zh_CN.png │ │ │ ├── zh_HK.png │ │ │ ├── zh_MO.png │ │ │ ├── zh_SG.png │ │ │ ├── zh_TW.png │ │ │ ├── zu_ZA.png │ │ │ ├── catalonia.png │ │ │ ├── england.png │ │ │ ├── galicia.png │ │ │ ├── scotland.png │ │ │ ├── europeanunion.png │ │ │ └── _info.txt │ │ └── i18nl10n_invisible.png │ │ ├── css │ │ ├── i18nl10n_lang_text.css │ │ ├── i18nl10n_lang_image.css │ │ ├── i18nl10n_lang_iso.css │ │ ├── i18nl10n_lang.css │ │ └── style.css │ │ ├── .htaccess │ │ └── js │ │ └── i18nl10n.js ├── VerstaerkerI18nl10nBundle.php ├── Exception │ └── NoRootPageException.php ├── Hook │ ├── IndexPageHook.php │ ├── CustomizeSearchHook.php │ ├── ExecutePostActionsHook.php │ ├── GetArticleHook.php │ ├── IsVisibleElementHook.php │ ├── InitializeSystemHook.php │ ├── GetSearchablePagesHook.php │ ├── GenerateBreadcrumbHook.php │ ├── ReplaceInsertTagsHook.php │ └── GenerateFrontendUrlHook.php ├── ContaoManager │ └── Plugin.php ├── DependencyInjection │ └── VerstaerkerI18nl10nExtension.php └── Classes │ └── I18nl10nFrontend.php ├── i18nl10n-logo_v2.png ├── .gitignore ├── codeception.yml ├── composer.json ├── CHANGELOG.md └── README.md /tests/_data/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Resources/config/services.yml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/_output/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore -------------------------------------------------------------------------------- /tests/_support/_generated/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore -------------------------------------------------------------------------------- /src/Resources/contao/templates/mod_i18nl10n_article_empty.html5: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /i18nl10n-logo_v2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/i18nl10n-logo_v2.png -------------------------------------------------------------------------------- /src/Resources/public/img/article.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/article.gif -------------------------------------------------------------------------------- /src/Resources/public/img/i18nl10n.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/i18nl10n.png -------------------------------------------------------------------------------- /src/Resources/public/img/localize_all.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/localize_all.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ad.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ae.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ae.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/af.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/af.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ag.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ai.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ai.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/al.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/al.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/am.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/am.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/an.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/an.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ao.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ar.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/as.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/as.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/at.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/at.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/au.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/au.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/aw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/aw.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ax.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ax.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/az.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/az.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ba.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ba.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/bb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/bb.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/bd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/bd.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/be.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/be.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/bf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/bf.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/bg.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/bh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/bh.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/bi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/bi.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/bj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/bj.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/bm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/bm.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/bn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/bn.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/bo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/bo.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/br.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/br.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/bs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/bs.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/bt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/bt.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/bv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/bv.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/bw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/bw.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/by.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/by.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/bz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/bz.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ca.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ca.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/cc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/cc.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/cd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/cd.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/cf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/cf.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/cg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/cg.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ch.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ci.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ci.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ck.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/cl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/cl.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/cm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/cm.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/cn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/cn.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/co.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/co.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/cr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/cr.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/cs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/cs.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/cu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/cu.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/cv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/cv.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/cx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/cx.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/cy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/cy.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/cz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/cz.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/de.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/de.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/dj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/dj.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/dk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/dk.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/dm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/dm.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/do.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/do.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/dz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/dz.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ec.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ec.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ee.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/eg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/eg.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/eh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/eh.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/el.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/el.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/en.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/er.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/er.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/es.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/es.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/et.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/et.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/eu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/eu.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/fam.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/fam.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/fi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/fi.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/fj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/fj.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/fk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/fk.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/fm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/fm.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/fo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/fo.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/fr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/fr.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ga.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ga.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/gb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/gb.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/gd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/gd.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ge.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/gf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/gf.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/gg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/gg.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/gh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/gh.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/gi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/gi.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/gl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/gl.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/gm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/gm.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/gn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/gn.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/gp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/gp.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/gq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/gq.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/gr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/gr.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/gs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/gs.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/gt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/gt.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/gu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/gu.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/gw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/gw.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/gy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/gy.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/hk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/hk.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/hm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/hm.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/hn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/hn.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/hr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/hr.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ht.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ht.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/hu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/hu.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/id.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/id.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ie.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/il.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/il.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/im.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/im.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/in.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/in.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/io.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/io.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/iq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/iq.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ir.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ir.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/is.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/is.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/it.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/it.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ja.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ja.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/je.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/je.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/jm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/jm.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/jo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/jo.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/jp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/jp.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ke.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ke.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/kg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/kg.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/kh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/kh.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ki.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ki.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/km.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/km.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/kn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/kn.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/kp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/kp.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/kr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/kr.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/kw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/kw.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ky.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ky.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/kz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/kz.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/la.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/la.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/lb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/lb.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/lc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/lc.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/li.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/li.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/lk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/lk.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/lr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/lr.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ls.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/lt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/lt.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/lu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/lu.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/lv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/lv.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ly.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ly.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ma.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ma.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/mc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/mc.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/md.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/md.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/me.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/me.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/mf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/mf.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/mg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/mg.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/mh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/mh.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/mk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/mk.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ml.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/mm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/mm.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/mn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/mn.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/mo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/mo.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/mp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/mp.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/mq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/mq.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/mr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/mr.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ms.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ms.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/mt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/mt.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/mu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/mu.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/mv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/mv.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/mw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/mw.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/mx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/mx.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/my.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/my.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/mz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/mz.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/na.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/na.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/nc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/nc.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/nc2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/nc2.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ne.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ne.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/nf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/nf.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ng.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ni.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ni.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/nl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/nl.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/no.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/no.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/np.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/np.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/nr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/nr.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/nu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/nu.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/nz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/nz.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/om.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/om.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/pa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/pa.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/pe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/pe.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/pf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/pf.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/pg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/pg.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ph.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/pk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/pk.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/pl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/pl.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/pm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/pm.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/pn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/pn.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/pr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/pr.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ps.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/pt.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/pw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/pw.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/py.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/py.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/qa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/qa.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/re.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/re.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ro.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/rs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/rs.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ru.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ru.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/rw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/rw.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/sa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/sa.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/sb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/sb.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/sc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/sc.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/sd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/sd.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/se.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/se.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/sg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/sg.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/sh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/sh.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/si.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/si.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/sj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/sj.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/sk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/sk.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/sl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/sl.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/sm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/sm.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/sn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/sn.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/so.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/so.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/sr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/sr.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/st.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/st.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/sv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/sv.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/sy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/sy.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/sz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/sz.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/tc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/tc.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/td.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/td.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/tf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/tf.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/tg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/tg.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/th.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/th.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/tj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/tj.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/tk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/tk.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/tl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/tl.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/tm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/tm.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/tn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/tn.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/to.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/to.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/tr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/tr.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/tt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/tt.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/tv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/tv.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/tw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/tw.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/tz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/tz.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ua.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ua.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ug.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ug.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/um.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/um.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/us.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/us.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/uy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/uy.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/uz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/uz.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/va.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/va.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/vc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/vc.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ve.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ve.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/vg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/vg.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/vi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/vi.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/vn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/vn.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/vu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/vu.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/wf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/wf.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ws.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ws.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ye.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ye.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/yt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/yt.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/za.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/za.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/zh.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/zm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/zm.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/zw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/zw.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/af_ZA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/af_ZA.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/am_ET.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/am_ET.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ar_AE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ar_AE.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ar_BH.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ar_BH.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ar_DZ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ar_DZ.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ar_EG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ar_EG.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ar_IQ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ar_IQ.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ar_JO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ar_JO.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ar_KW.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ar_KW.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ar_LB.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ar_LB.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ar_LY.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ar_LY.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ar_MA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ar_MA.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ar_OM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ar_OM.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ar_QA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ar_QA.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ar_SA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ar_SA.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ar_SY.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ar_SY.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ar_TN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ar_TN.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ar_YE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ar_YE.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/as_IN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/as_IN.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/az_AZ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/az_AZ.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/bn_ID.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/bn_ID.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/bs_BA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/bs_BA.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ca_ES.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ca_ES.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/cs_CZ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/cs_CZ.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/da_DK.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/da_DK.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/de_AT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/de_AT.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/de_CH.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/de_CH.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/de_DE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/de_DE.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/de_LI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/de_LI.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/de_LU.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/de_LU.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/dz_BT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/dz_BT.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/el_GR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/el_GR.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/en_AU.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/en_AU.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/en_BZ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/en_BZ.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/en_CA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/en_CA.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/en_GB.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/en_GB.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/en_IE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/en_IE.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/en_IN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/en_IN.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/en_JM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/en_JM.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/en_NZ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/en_NZ.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/en_PH.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/en_PH.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/en_TT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/en_TT.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/en_US.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/en_US.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/en_ZA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/en_ZA.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/es_AR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/es_AR.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/es_BO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/es_BO.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/es_CL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/es_CL.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/es_CO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/es_CO.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/es_CR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/es_CR.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/es_DO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/es_DO.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/es_EC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/es_EC.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/es_ES.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/es_ES.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/es_GT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/es_GT.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/es_HN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/es_HN.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/es_MX.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/es_MX.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/es_NI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/es_NI.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/es_PA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/es_PA.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/es_PE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/es_PE.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/es_PR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/es_PR.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/es_PY.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/es_PY.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/es_SV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/es_SV.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/es_UY.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/es_UY.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/es_VE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/es_VE.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/fr_BE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/fr_BE.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/fr_CA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/fr_CA.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/fr_CH.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/fr_CH.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/fr_FR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/fr_FR.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/fr_LU.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/fr_LU.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/fy_NL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/fy_NL.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/gd_IE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/gd_IE.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/hr_HR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/hr_HR.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/hy_AM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/hy_AM.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/id_ID.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/id_ID.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/is_IS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/is_IS.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/it_CH.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/it_CH.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/it_IT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/it_IT.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ka_GE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ka_GE.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/lv_LV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/lv_LV.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ms_BN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ms_BN.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ms_MY.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ms_MY.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/mt_MT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/mt_MT.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/nl_BE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/nl_BE.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/nl_NL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/nl_NL.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/no_NO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/no_NO.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/pa_IN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/pa_IN.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/pt_BR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/pt_BR.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/pt_PT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/pt_PT.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ro_MO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ro_MO.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ro_RO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ro_RO.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ru_MO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ru_MO.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ru_RU.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ru_RU.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/sk_SK.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/sk_SK.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/sq_AL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/sq_AL.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/sr_RS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/sr_RS.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/sr_SP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/sr_SP.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/sv_FI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/sv_FI.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/sv_SE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/sv_SE.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/tr_TR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/tr_TR.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/uk_UA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/uk_UA.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/ur_PK.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/ur_PK.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/uz_UZ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/uz_UZ.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/vi_VN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/vi_VN.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/wales.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/wales.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/wo_SN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/wo_SN.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/zh_CN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/zh_CN.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/zh_HK.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/zh_HK.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/zh_MO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/zh_MO.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/zh_SG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/zh_SG.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/zh_TW.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/zh_TW.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/zu_ZA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/zu_ZA.png -------------------------------------------------------------------------------- /src/Resources/public/css/i18nl10n_lang_text.css: -------------------------------------------------------------------------------- 1 | /** type 'image' style adjustments **/ 2 | .i18nl10n_lang_style_text .i18nl10n_flag { 3 | display: none; 4 | } -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/catalonia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/catalonia.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/england.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/england.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/galicia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/galicia.png -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/scotland.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/scotland.png -------------------------------------------------------------------------------- /src/Resources/public/img/i18nl10n_invisible.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/i18nl10n_invisible.png -------------------------------------------------------------------------------- /src/Resources/public/css/i18nl10n_lang_image.css: -------------------------------------------------------------------------------- 1 | /** type 'image' style adjustments **/ 2 | .i18nl10n_lang_style_image .i18nl10n_label { 3 | display: none; 4 | } -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/europeanunion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exploreimpact/contao-i18nl10n/HEAD/src/Resources/public/img/flag_icons/europeanunion.png -------------------------------------------------------------------------------- /src/Resources/public/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | Order allow,deny 3 | Allow from all 4 | 5 | 6 | Require all granted 7 | -------------------------------------------------------------------------------- /tests/functional/Feature_SearchCept.php: -------------------------------------------------------------------------------- 1 | wantTo('check search behaviour'); 4 | 5 | /* 6 | * Home 7 | */ 8 | // My location 9 | $I->amOnPage('/'); 10 | 11 | // ... t.b.d. ... 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # OS 2 | .DS_Store 3 | Thumbs.db 4 | 5 | # IDEs 6 | .buildpath 7 | .project 8 | .settings/ 9 | .build/ 10 | .idea/ 11 | nbproject/ 12 | *.sublime-* 13 | 14 | # Vendors 15 | /vendor 16 | 17 | # Distribution 18 | /dist 19 | /build -------------------------------------------------------------------------------- /tests/_support/Helper/Unit.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class VerstaerkerI18nl10nBundle extends Bundle 13 | { 14 | } 15 | -------------------------------------------------------------------------------- /tests/functional/Page_SitemapCept.php: -------------------------------------------------------------------------------- 1 | wantTo('move to the Sitemap page and check its content'); 4 | 5 | /* 6 | * Home 7 | */ 8 | // My location 9 | $I->amOnPage('/'); 10 | 11 | 12 | /* 13 | * Sitemap 14 | */ 15 | // Move to "Sitemap" 16 | $I->click('Sitemap'); 17 | 18 | // ... t.b.d. ... 19 | -------------------------------------------------------------------------------- /src/Resources/contao/languages/de/tl_article.php: -------------------------------------------------------------------------------- 1 | 7 | * @package i18nl10n 8 | * @license LGPLv3 http://www.gnu.org/licenses/lgpl-3.0.html 9 | */ 10 | 11 | $GLOBALS['TL_LANG']['tl_article']['elements'] = 'Element(e)'; -------------------------------------------------------------------------------- /src/Resources/contao/languages/en/tl_article.php: -------------------------------------------------------------------------------- 1 | 7 | * @package i18nl10n 8 | * @license LGPLv3 http://www.gnu.org/licenses/lgpl-3.0.html 9 | */ 10 | 11 | $GLOBALS['TL_LANG']['tl_article']['elements'] = 'element(s)'; -------------------------------------------------------------------------------- /codeception.yml: -------------------------------------------------------------------------------- 1 | paths: 2 | tests: tests 3 | output: tests/_output 4 | data: tests/_data 5 | support: tests/_support 6 | envs: tests/_envs 7 | actor_suffix: Tester 8 | extensions: 9 | enabled: 10 | - Codeception\Extension\RunFailed 11 | coverage: 12 | enabled: true 13 | include: 14 | - framework/i18nl10n/src/Classes/* 15 | - framework/i18nl10n/src/Hooks/* 16 | -------------------------------------------------------------------------------- /src/Resources/contao/templates/mod_i18nl10n_nav.html5: -------------------------------------------------------------------------------- 1 | 2 |
style ? 'style="' . $this->style . '"' : '') . $this->cssID; ?>> 3 | headline ? "<$this->hl>$this->headlinehl>" : ''; ?> 4 | items; ?> 5 |
6 | -------------------------------------------------------------------------------- /src/Resources/public/img/flag_icons/_info.txt: -------------------------------------------------------------------------------- 1 | Flag Icons 2 | 3 | Flag icons in this package are public domain. 4 | Graphic effects were created by Phoca.cz in GIMP. 5 | 6 | For more info see: 7 | 8 | * Phoca.cz - http://www.phoca.cz 9 | * Flag Icons - http://www.phoca.cz/flag-icons 10 | 11 | or contact: 12 | 13 | * info [at] phoca [dot] cz 14 | 15 | If you find some bug, please report it to info [at] phoca [dot] cz 16 | 17 | Thank you. 18 | 19 | -------------------------------------------------------------------------------- /src/Resources/contao/languages/fr/tl_article.php: -------------------------------------------------------------------------------- 1 | 7 | * @author Web ex Machina (FR Translation) 8 | * @package i18nl10n 9 | * @license LGPLv3 http://www.gnu.org/licenses/lgpl-3.0.html 10 | */ 11 | 12 | $GLOBALS['TL_LANG']['tl_article']['elements'] = 'élément(s)'; -------------------------------------------------------------------------------- /src/Resources/public/css/i18nl10n_lang.css: -------------------------------------------------------------------------------- 1 | /** global i18nl10n language styles **/ 2 | .mod_i18nl10nLanguageSelection ul { 3 | list-style: none; 4 | padding: 0 0 0 5px; 5 | margin: 10px 0; 6 | } 7 | 8 | .i18nl10n_flag { 9 | display: inline-block; 10 | width: 16px; 11 | min-height: 12px; 12 | margin-right: 5px; 13 | } 14 | 15 | .i18nl10n_flag img { 16 | vertical-align: top; 17 | margin-top: 1px; 18 | } 19 | 20 | .i18nl10n_iso { 21 | display: none; 22 | } -------------------------------------------------------------------------------- /src/Resources/contao/languages/en/tl_user.php: -------------------------------------------------------------------------------- 1 | 7 | * @package i18nl10n 8 | * @license LGPLv3 http://www.gnu.org/licenses/lgpl-3.0.html 9 | */ 10 | 11 | $GLOBALS['TL_LANG']['tl_user']['i18nl10n_languages'] = array( 12 | 'Editable languages', 13 | 'Set the editable languages for content elements and pages.' 14 | ); -------------------------------------------------------------------------------- /tests/functional/Feature_InsertTagCept.php: -------------------------------------------------------------------------------- 1 | wantTo('check inserttags behaviour'); 4 | 5 | 6 | /* 7 | * Home 8 | */ 9 | // My location 10 | $I->amOnPage('/'); 11 | 12 | // Inserttag state 13 | $I->see('Standardseite', '.test-i18nl10n-inserttag'); 14 | 15 | 16 | /* 17 | * Home (ES) 18 | */ 19 | // Move to spanish version 20 | $I->click('Español', '.i18nl10n_lang'); 21 | 22 | // Inserttag state 23 | $I->see('Página por defecto', '.test-i18nl10n-inserttag'); 24 | -------------------------------------------------------------------------------- /src/Resources/contao/templates/mod_search_i18nl10n.html5: -------------------------------------------------------------------------------- 1 | extend('block_unsearchable'); ?> 2 | 3 | block('content'); ?> 4 | 5 | form; ?> 6 | 7 | header): ?> 8 |

header); ?> (duration; ?>)

9 | 10 | 11 | i18nl10n::[A-z]{2}@', '', $this->results) . $this->pagination; ?> 12 | 13 | endblock(); ?> 14 | -------------------------------------------------------------------------------- /src/Resources/contao/dca/tl_files.php: -------------------------------------------------------------------------------- 1 | 11 | * @package i18nl10n classes 12 | * @license LGPLv3 http://www.gnu.org/licenses/lgpl-3.0.html 13 | */ 14 | 15 | $GLOBALS['TL_DCA']['tl_files']['fields']['meta']['inputType'] ='i18nl10nMetaWizard'; 16 | -------------------------------------------------------------------------------- /src/Resources/contao/languages/de/tl_user.php: -------------------------------------------------------------------------------- 1 | 7 | * @package i18nl10n 8 | * @license LGPLv3 http://www.gnu.org/licenses/lgpl-3.0.html 9 | */ 10 | 11 | $GLOBALS['TL_LANG']['tl_user']['i18nl10n_legend'] = 'Sprachen'; 12 | $GLOBALS['TL_LANG']['tl_user']['i18nl10n_languages'] = array( 13 | 'Editierbare Sprachen', 14 | 'Definiert die editierbaren Sprachen für Seiten und Inhaltselemente.' 15 | ); -------------------------------------------------------------------------------- /src/Resources/contao/languages/en/tl_user_group.php: -------------------------------------------------------------------------------- 1 | 7 | * @package i18nl10n 8 | * @license LGPLv3 http://www.gnu.org/licenses/lgpl-3.0.html 9 | */ 10 | 11 | $GLOBALS['TL_LANG']['tl_user_group']['i18nl10n_legend'] = 'Languages'; 12 | $GLOBALS['TL_LANG']['tl_user_group']['i18nl10n_languages'] = array( 13 | 'Editable languages', 14 | 'Set the editable languages for content elements and pages.' 15 | ); -------------------------------------------------------------------------------- /src/Resources/contao/languages/de/tl_user_group.php: -------------------------------------------------------------------------------- 1 | 7 | * @package i18nl10n 8 | * @license LGPLv3 http://www.gnu.org/licenses/lgpl-3.0.html 9 | */ 10 | 11 | $GLOBALS['TL_LANG']['tl_user_group']['i18nl10n_legend'] = 'Sprachen'; 12 | $GLOBALS['TL_LANG']['tl_user_group']['i18nl10n_languages'] = array( 13 | 'Editierbare Sprachen', 14 | 'Definiert die editierbaren Sprachen für Seiten und Inhaltselemente.' 15 | ); -------------------------------------------------------------------------------- /src/Resources/contao/languages/fr/tl_user.php: -------------------------------------------------------------------------------- 1 | 7 | * @author Web ex Machina (FR Translation) 8 | * @package i18nl10n 9 | * @license LGPLv3 http://www.gnu.org/licenses/lgpl-3.0.html 10 | */ 11 | 12 | $GLOBALS['TL_LANG']['tl_user']['i18nl10n_languages'] = array( 13 | 'Langues éditables', 14 | 'Indiquez les langues éditables pour les éléments de contenu et les pages.' 15 | ); -------------------------------------------------------------------------------- /src/Exception/NoRootPageException.php: -------------------------------------------------------------------------------- 1 | code}]: {$this->message}\n"; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/Hook/IndexPageHook.php: -------------------------------------------------------------------------------- 1 | wantTo('move to the Special page and check its content'); 4 | 5 | 6 | /* 7 | * Home 8 | */ 9 | // My location 10 | $I->amOnPage('/'); 11 | 12 | 13 | /* 14 | * Spezialseite 15 | */ 16 | // Move to "Spezialseite" 17 | $I->click('Spezialseite'); 18 | 19 | // Check content 20 | $I->see('German Special Content', 'h2'); 21 | $I->cantSee('English Special Content', 'h2'); 22 | 23 | // Language switcher states 24 | $I->see('Deutsch', 'li > span'); 25 | $I->cantSee('English', 'li > a > span'); 26 | $I->see('Español', 'li > a > span'); 27 | -------------------------------------------------------------------------------- /src/Resources/contao/templates/lang_select.html5: -------------------------------------------------------------------------------- 1 |
2 | 14 | 15 |
-------------------------------------------------------------------------------- /src/Resources/contao/languages/en/tl_content.php: -------------------------------------------------------------------------------- 1 | 7 | * @package i18nl10n 8 | * @license LGPLv3 http://www.gnu.org/licenses/lgpl-3.0.html 9 | */ 10 | 11 | 12 | /** 13 | * Fields 14 | */ 15 | $GLOBALS['TL_LANG']['tl_content']['language'] = &$GLOBALS['TL_LANG']['MSC']['language']; 16 | $GLOBALS['TL_LANG']['tl_content']['i18nl10n_blankOptionLabel'] = 'Any'; 17 | 18 | /** 19 | * References 20 | */ 21 | $GLOBALS['TL_LANG']['tl_content']['i18nl10n_legend'] = 'L10N Settings'; -------------------------------------------------------------------------------- /src/Resources/contao/languages/de/tl_content.php: -------------------------------------------------------------------------------- 1 | 7 | * @package i18nl10n 8 | * @license LGPLv3 http://www.gnu.org/licenses/lgpl-3.0.html 9 | */ 10 | 11 | 12 | /** 13 | * Fields 14 | */ 15 | $GLOBALS['TL_LANG']['tl_content']['language'] = &$GLOBALS['TL_LANG']['MSC']['language']; 16 | $GLOBALS['TL_LANG']['tl_content']['i18nl10n_blankOptionLabel'] = 'Alle'; 17 | 18 | /** 19 | * References 20 | */ 21 | $GLOBALS['TL_LANG']['tl_content']['i18nl10n_legend'] = 'L10N Einstellungen'; -------------------------------------------------------------------------------- /src/Resources/contao/languages/fr/tl_user_group.php: -------------------------------------------------------------------------------- 1 | 7 | * @author Web ex Machina (FR Translation) 8 | * @package i18nl10n 9 | * @license LGPLv3 http://www.gnu.org/licenses/lgpl-3.0.html 10 | */ 11 | 12 | $GLOBALS['TL_LANG']['tl_user_group']['i18nl10n_legend'] = 'Langues'; 13 | $GLOBALS['TL_LANG']['tl_user_group']['i18nl10n_languages'] = array( 14 | 'Langues éditables', 15 | 'Indiquez les langues éditables pour les éléments de contenu et les pages.' 16 | ); -------------------------------------------------------------------------------- /tests/_support/UnitTester.php: -------------------------------------------------------------------------------- 1 | 7 | * @author Web ex Machina (FR Translation) 8 | * @package i18nl10n 9 | * @license LGPLv3 http://www.gnu.org/licenses/lgpl-3.0.html 10 | */ 11 | 12 | 13 | /** 14 | * Fields 15 | */ 16 | $GLOBALS['TL_LANG']['tl_content']['language'] = &$GLOBALS['TL_LANG']['MSC']['language']; 17 | $GLOBALS['TL_LANG']['tl_content']['i18nl10n_blankOptionLabel'] = 'Tous'; 18 | 19 | /** 20 | * References 21 | */ 22 | $GLOBALS['TL_LANG']['tl_content']['i18nl10n_legend'] = 'Paramètres L10N'; -------------------------------------------------------------------------------- /src/Hook/CustomizeSearchHook.php: -------------------------------------------------------------------------------- 1 | 7 | * @package i18nl10n 8 | * @license LGPLv3 http://www.gnu.org/licenses/lgpl-3.0.html 9 | */ 10 | 11 | /** 12 | * Back end modules 13 | */ 14 | $GLOBALS['TL_LANG']['MOD']['i18nl10n'] = array 15 | ( 16 | 'Multilingual pages', 17 | 'Create a one-pagetree multi-language site by adding multiple languages to pages and localizing content elements.' 18 | ); 19 | 20 | 21 | /** 22 | * Front end modules 23 | */ 24 | $GLOBALS['TL_LANG']['FMD']['i18nl10nLanguageSelection'] = array 25 | ( 26 | 'Language selection', 27 | 'Generates a flat list or a select element of available page languages.' 28 | ); -------------------------------------------------------------------------------- /src/Resources/contao/languages/de/modules.php: -------------------------------------------------------------------------------- 1 | 7 | * @package i18nl10n 8 | * @license LGPLv3 http://www.gnu.org/licenses/lgpl-3.0.html 9 | */ 10 | 11 | /** 12 | * Back end modules 13 | */ 14 | $GLOBALS['TL_LANG']['MOD']['i18nl10n'] = array 15 | ( 16 | 'Mehrsprachige Seiten', 17 | 'Erstellt eine mehrsprachige Website mit nur einem Seitenbaum. Seiten und Inhaltselemente können mit Übersetzungen ergänzt werden.' 18 | ); 19 | 20 | 21 | /** 22 | * Front end modules 23 | */ 24 | $GLOBALS['TL_LANG']['FMD']['i18nl10nLanguageSelection'] = array 25 | ( 26 | 'Sprachwahl', 27 | 'Generiert eine Liste oder eine Select-Element der verfügbaren Seitensprachen.' 28 | ); -------------------------------------------------------------------------------- /src/Resources/contao/languages/en/default.php: -------------------------------------------------------------------------------- 1 | 7 | * @package i18nl10n 8 | * @license LGPLv3 http://www.gnu.org/licenses/lgpl-3.0.html 9 | */ 10 | 11 | 12 | /** 13 | * Miscellaneous 14 | */ 15 | $GLOBALS['TL_LANG']['MSC']['i18nl10n_fields']['language']['label'] = array 16 | ( 17 | 'Language', 18 | 'Please select one of the available languages' 19 | ); 20 | 21 | $GLOBALS['TL_LANG']['MSC']['editL10n'] = 'Edit localizations for page %s'; 22 | $GLOBALS['TL_LANG']['MSC']['language'] = 'language'; 23 | 24 | $GLOBALS['TL_LANG']['LNG'][''] = 'Neutral'; 25 | 26 | $GLOBALS['TL_LANG']['ERR']['i18nl10n_aliasExists'] = 'The alias "%s" already exists for the selected language.'; -------------------------------------------------------------------------------- /tests/functional/Feature_BreadcrumbCept.php: -------------------------------------------------------------------------------- 1 | wantTo('check breadcrumb content element behaviour'); 4 | 5 | 6 | /* 7 | * Home 8 | */ 9 | // My location 10 | $I->amOnPage('/'); 11 | 12 | // Breadcrumb state 13 | $I->see('Home', '.mod_breadcrumb'); 14 | 15 | 16 | /* 17 | * Spezialseite (DE) 18 | */ 19 | // Move to "Spezialseite" 20 | $I->click('Spezialseite'); 21 | 22 | // Language switcher states 23 | $I->see('Deutsch', 'li > span'); 24 | 25 | // Breadcrumb state 26 | $I->see('Spezialseite', '.mod_breadcrumb'); 27 | 28 | 29 | /* 30 | * Spezialseite (ES) 31 | */ 32 | // Move to spanish version 33 | $I->click('Español', '.i18nl10n_lang'); 34 | 35 | // Language switcher states 36 | $I->see('Deutsch', 'li > a > span'); 37 | 38 | // Breadcrumb state 39 | $I->see('Página especial', '.mod_breadcrumb'); 40 | -------------------------------------------------------------------------------- /src/Resources/contao/languages/de/default.php: -------------------------------------------------------------------------------- 1 | 7 | * @package i18nl10n 8 | * @license LGPLv3 http://www.gnu.org/licenses/lgpl-3.0.html 9 | */ 10 | 11 | 12 | /** 13 | * Miscellaneous 14 | */ 15 | $GLOBALS['TL_LANG']['MSC']['i18nl10n_fields']['language']['label'] = array 16 | ( 17 | 'Sprache', 18 | 'Bitte eine der verfügbaren Sprachen wählen' 19 | ); 20 | 21 | $GLOBALS['TL_LANG']['MSC']['editL10n'] = 'Übersetzung für die Seite %s bearbeiten'; 22 | $GLOBALS['TL_LANG']['MSC']['language'] = 'Sprache'; 23 | 24 | $GLOBALS['TL_LANG']['LNG'][''] = 'Neutral'; 25 | 26 | $GLOBALS['TL_LANG']['ERR']['i18nl10n_aliasExists'] = 'Das Alias "%s" wird in dieser Sprache bereits verwendet.'; -------------------------------------------------------------------------------- /src/Hook/ExecutePostActionsHook.php: -------------------------------------------------------------------------------- 1 | toggleL10n( 26 | \Input::post('id'), 27 | \Input::post('state') == 1 28 | ); 29 | break; 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/ContaoManager/Plugin.php: -------------------------------------------------------------------------------- 1 | 15 | */ 16 | class Plugin implements BundlePluginInterface 17 | { 18 | /** 19 | * {@inheritdoc} 20 | */ 21 | public function getBundles(ParserInterface $parser) 22 | { 23 | return [ 24 | BundleConfig::create(VerstaerkerI18nl10nBundle::class) 25 | ->setLoadAfter([ContaoCoreBundle::class]) 26 | ->setReplace(['i18nl10n']), 27 | ]; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /tests/functional/Page_StandardCept.php: -------------------------------------------------------------------------------- 1 | wantTo('move to the Standard page and check its content'); 4 | 5 | 6 | /* 7 | * Home 8 | */ 9 | // My location 10 | $I->amOnPage('/'); 11 | 12 | 13 | /* 14 | * Standardseite 15 | */ 16 | // Move to "Standardseite" 17 | $I->click('Standardseite'); 18 | 19 | // Check content 20 | $I->see('German Standard Content', 'h2'); 21 | $I->cantSee('English Standard Content', 'h2'); 22 | 23 | // Language switcher states 24 | $I->see('Deutsch', 'li > span'); 25 | $I->see('English', 'li > a > span'); 26 | $I->see('Español', 'li > a > span'); 27 | 28 | 29 | /* 30 | * Standardseite (EN) 31 | */ 32 | // Change language to "English" 33 | $I->click('English', '.i18nl10n_lang_en'); 34 | 35 | // Language switcher states 36 | $I->see('Deutsch', 'li > a > span'); 37 | $I->see('English', 'li > span'); 38 | $I->see('Español', 'li > a > span'); 39 | -------------------------------------------------------------------------------- /src/Resources/contao/languages/fr/modules.php: -------------------------------------------------------------------------------- 1 | 7 | * @author Web ex Machina (FR Translation) 8 | * @package i18nl10n 9 | * @license LGPLv3 http://www.gnu.org/licenses/lgpl-3.0.html 10 | */ 11 | 12 | /** 13 | * Back end modules 14 | */ 15 | $GLOBALS['TL_LANG']['MOD']['i18nl10n'] = array 16 | ( 17 | 'Pages multilingues', 18 | 'Créez une arborescence multilingue unique en ajoutant des langages aux pages et en localisant les éléments de contenu.' 19 | ); 20 | 21 | 22 | /** 23 | * Front end modules 24 | */ 25 | $GLOBALS['TL_LANG']['FMD']['i18nl10nLanguageSelection'] = array 26 | ( 27 | 'Sélection de language', 28 | 'Génère une liste de langues ou une liste déroulante des langues disponibles pour la page courante.' 29 | ); -------------------------------------------------------------------------------- /src/Resources/contao/languages/fr/default.php: -------------------------------------------------------------------------------- 1 | 7 | * @author Web ex Machina (FR Translation) 8 | * @package i18nl10n 9 | * @license LGPLv3 http://www.gnu.org/licenses/lgpl-3.0.html 10 | */ 11 | 12 | 13 | /** 14 | * Miscellaneous 15 | */ 16 | $GLOBALS['TL_LANG']['MSC']['i18nl10n_fields']['language']['label'] = array 17 | ( 18 | 'Langue', 19 | 'Veuillez sélectionner l\'une des langues disponibles.' 20 | ); 21 | 22 | $GLOBALS['TL_LANG']['MSC']['editL10n'] = 'Éditer les versions multilingues de la page %s'; 23 | $GLOBALS['TL_LANG']['MSC']['language'] = 'langue'; 24 | 25 | $GLOBALS['TL_LANG']['LNG'][''] = 'Neutre'; 26 | 27 | $GLOBALS['TL_LANG']['ERR']['i18nl10n_aliasExists'] = 'L\'alias "%s" existe déjà pour la langue sélectionnée.'; -------------------------------------------------------------------------------- /tests/functional/Page_HomeCept.php: -------------------------------------------------------------------------------- 1 | wantTo('call the Home page and check its content'); 4 | 5 | 6 | /* 7 | * Home 8 | */ 9 | // My location 10 | $I->amOnPage('/'); 11 | $I->see('Navigation', 'h1'); 12 | 13 | // Language switcher states 14 | $I->see('Deutsch', 'li > span'); 15 | $I->see('English', 'li > a > span'); 16 | $I->see('Español', 'li > a > span'); 17 | 18 | 19 | /* 20 | * Home (EN) 21 | */ 22 | // Move to english version 23 | $I->click('English', '.i18nl10n_lang'); 24 | 25 | // Language switcher states 26 | $I->see('Deutsch', 'li > a > span'); 27 | $I->see('English', 'li > span'); 28 | $I->see('Español', 'li > a > span'); 29 | 30 | 31 | /* 32 | * Home (ES) 33 | */ 34 | // Move to spanish version 35 | $I->click('Español', '.i18nl10n_lang'); 36 | 37 | // Language switcher states 38 | $I->see('Deutsch', 'li > a > span'); 39 | $I->see('English', 'li > a > span'); 40 | $I->see('Español', 'li > span'); 41 | -------------------------------------------------------------------------------- /src/DependencyInjection/VerstaerkerI18nl10nExtension.php: -------------------------------------------------------------------------------- 1 | 22 | */ 23 | class VerstaerkerI18nl10nExtension extends Extension 24 | { 25 | /** 26 | * {@inheritdoc} 27 | */ 28 | public function load(array $mergedConfig, ContainerBuilder $container) 29 | { 30 | $loader = new YamlFileLoader( 31 | $container, 32 | new FileLocator(__DIR__.'/../Resources/config') 33 | ); 34 | 35 | $loader->load('services.yml'); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/Resources/contao/templates/lang_default.html5: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Hook/GetArticleHook.php: -------------------------------------------------------------------------------- 1 | id, "tl_article"); 21 | 22 | $blnDisplay = false; 23 | if ($objElements && $objElements->count() > 0) { 24 | while ($objElements->next()) { 25 | if ($objElements->language == "" || $objElements->language == $GLOBALS['TL_LANGUAGE']) { 26 | $blnDisplay = true; 27 | break; 28 | } 29 | } 30 | } 31 | 32 | if (!$blnDisplay) { 33 | $objRow->customTpl = "mod_i18nl10n_article_empty"; 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/Hook/IsVisibleElementHook.php: -------------------------------------------------------------------------------- 1 | language) { 31 | // Check if given language is valid or fallback should be used 32 | $strLanguage = $objPage->useFallbackLanguage 33 | ? $objPage->rootLanguage 34 | : $GLOBALS['TL_LANGUAGE']; 35 | 36 | $blnIsVisible = $objElement->language === $strLanguage; 37 | } 38 | 39 | return $blnIsVisible; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/Resources/contao/templates/nav_l10n.html5: -------------------------------------------------------------------------------- 1 | import('Verstaerker\I18nl10nBundle\Classes\I18nl10nFrontend', 'I18nl10n'); ?> 2 | 18 | -------------------------------------------------------------------------------- /src/Resources/contao/templates/nav_i18nl10n.html5: -------------------------------------------------------------------------------- 1 | import('Verstaerker\I18nl10nBundle\Classes\I18nl10nFrontend', 'I18nl10n'); ?> 2 | 18 | -------------------------------------------------------------------------------- /src/Resources/contao/languages/en/tl_module.php: -------------------------------------------------------------------------------- 1 | 7 | * @package i18nl10n 8 | * @license LGPLv3 http://www.gnu.org/licenses/lgpl-3.0.html 9 | */ 10 | 11 | $GLOBALS['TL_LANG']['tl_module']['i18nl10n_langTpl'] = array 12 | ( 13 | 'Template', 14 | 'Choose a template for the language menu.' 15 | ); 16 | 17 | $GLOBALS['TL_LANG']['tl_module']['i18nl10n_langStyle'] = array 18 | ( 19 | 'Use style', 20 | 'Use one of the delivered CSS styles.' 21 | ); 22 | 23 | $GLOBALS['TL_LANG']['tl_module']['i18nl10n_langStyleLabels']['full'] = 'Icon & label'; 24 | $GLOBALS['TL_LANG']['tl_module']['i18nl10n_langStyleLabels']['text'] = 'Label only'; 25 | $GLOBALS['TL_LANG']['tl_module']['i18nl10n_langStyleLabels']['image'] = 'Icon only'; 26 | $GLOBALS['TL_LANG']['tl_module']['i18nl10n_langStyleLabels']['iso'] = 'ISO code'; 27 | $GLOBALS['TL_LANG']['tl_module']['i18nl10n_langStyleLabels']['disable'] = 'Disable style'; 28 | 29 | $GLOBALS['TL_LANG']['tl_module']['i18nl10n_langHide'] = array 30 | ( 31 | 'Hide active language', 32 | 'Don\'t show current language in options.' 33 | ); -------------------------------------------------------------------------------- /src/Resources/contao/languages/de/tl_module.php: -------------------------------------------------------------------------------- 1 | 7 | * @package i18nl10n 8 | * @license LGPLv3 http://www.gnu.org/licenses/lgpl-3.0.html 9 | */ 10 | 11 | $GLOBALS['TL_LANG']['tl_module']['i18nl10n_langTpl'] = array 12 | ( 13 | 'Template', 14 | 'Legt das Template für die Sprachwahl fest.' 15 | ); 16 | 17 | $GLOBALS['TL_LANG']['tl_module']['i18nl10n_langStyle'] = array 18 | ( 19 | 'Style verwenden', 20 | 'Legt fest, welcher der gelieferten CSS Styles verwendet werden soll.' 21 | ); 22 | 23 | $GLOBALS['TL_LANG']['tl_module']['i18nl10n_langStyleLabels']['full'] = 'Flagge & Beschriftung'; 24 | $GLOBALS['TL_LANG']['tl_module']['i18nl10n_langStyleLabels']['text'] = 'Nur Beschriftung'; 25 | $GLOBALS['TL_LANG']['tl_module']['i18nl10n_langStyleLabels']['image'] = 'Nur Flagge'; 26 | $GLOBALS['TL_LANG']['tl_module']['i18nl10n_langStyleLabels']['iso'] = 'ISO-Code'; 27 | $GLOBALS['TL_LANG']['tl_module']['i18nl10n_langStyleLabels']['disable'] = 'Kein Style'; 28 | 29 | $GLOBALS['TL_LANG']['tl_module']['i18nl10n_langHide'] = array 30 | ( 31 | 'Aktive Sprache ausblenden', 32 | 'Fügt die aktuell aktive Sprache nicht zur Sprachwahl hinzu.' 33 | ); -------------------------------------------------------------------------------- /src/Resources/contao/languages/fr/tl_module.php: -------------------------------------------------------------------------------- 1 | 7 | * @author Web ex Machina (FR Translation) 8 | * @package i18nl10n 9 | * @license LGPLv3 http://www.gnu.org/licenses/lgpl-3.0.html 10 | */ 11 | 12 | $GLOBALS['TL_LANG']['tl_module']['i18nl10n_langTpl'] = array 13 | ( 14 | 'Modèle', 15 | 'Choisissez un modèle pour le menu des langues.' 16 | ); 17 | 18 | $GLOBALS['TL_LANG']['tl_module']['i18nl10n_langStyle'] = array 19 | ( 20 | 'Utilisez un style', 21 | 'Utilisez un des styles CSS existants.' 22 | ); 23 | 24 | $GLOBALS['TL_LANG']['tl_module']['i18nl10n_langStyleLabels']['full'] = 'Icône & Label'; 25 | $GLOBALS['TL_LANG']['tl_module']['i18nl10n_langStyleLabels']['text'] = 'Label seul'; 26 | $GLOBALS['TL_LANG']['tl_module']['i18nl10n_langStyleLabels']['image'] = 'Icône seule'; 27 | $GLOBALS['TL_LANG']['tl_module']['i18nl10n_langStyleLabels']['iso'] = 'Code ISO'; 28 | $GLOBALS['TL_LANG']['tl_module']['i18nl10n_langStyleLabels']['disable'] = 'Aucun style'; 29 | 30 | $GLOBALS['TL_LANG']['tl_module']['i18nl10n_langHide'] = array 31 | ( 32 | 'Cacher le langage actif', 33 | 'N\'affiche pas le langage courant dans les options.' 34 | ); -------------------------------------------------------------------------------- /src/Resources/contao/dca/tl_user_group.php: -------------------------------------------------------------------------------- 1 | 10 | * @package i18nl10n dca 11 | * @license LGPLv3 http://www.gnu.org/licenses/lgpl-3.0.html 12 | */ 13 | 14 | $this->loadLanguageFile('languages'); 15 | 16 | /** 17 | * Palettes 18 | */ 19 | $GLOBALS['TL_DCA']['tl_user_group']['palettes']['default'] = preg_replace( 20 | '@;{pagemounts_legend@', 21 | ';{i18nl10n_legend},i18nl10n_languages;{pagemounts_legend', 22 | $GLOBALS['TL_DCA']['tl_user_group']['palettes']['default'] 23 | ); 24 | 25 | /** 26 | * Fields 27 | */ 28 | $GLOBALS['TL_DCA']['tl_user_group']['fields']['i18nl10n_languages'] = array 29 | ( 30 | 'label' => &$GLOBALS['TL_LANG']['tl_user_group']['i18nl10n_languages'], 31 | 'exclude' => true, 32 | 'inputType' => 'checkbox', 33 | 'options_callback' => array('Verstaerker\I18nl10nBundle\Classes\I18nl10n', 'getLanguageOptionsForUserOrGroup'), 34 | 'reference' => &$GLOBALS['TL_LANG']['LNG'], 35 | 'eval' => array( 36 | 'multiple' => true 37 | ), 38 | 'sql' => 'blob NULL' 39 | ); 40 | -------------------------------------------------------------------------------- /src/Resources/contao/dca/tl_user.php: -------------------------------------------------------------------------------- 1 | 7 | * @package i18nl10n 8 | * @license LGPLv3 http://www.gnu.org/licenses/lgpl-3.0.html 9 | */ 10 | 11 | $this->loadLanguageFile('languages'); 12 | 13 | /** 14 | * Palettes 15 | */ 16 | $GLOBALS['TL_DCA']['tl_user']['palettes']['extend'] = preg_replace( 17 | '@;{pagemounts_legend@', 18 | ';{i18nl10n_legend},i18nl10n_languages;{pagemounts_legend', 19 | $GLOBALS['TL_DCA']['tl_user']['palettes']['extend'] 20 | ); 21 | 22 | $GLOBALS['TL_DCA']['tl_user']['palettes']['custom'] = preg_replace( 23 | '@;{pagemounts_legend@', 24 | ';{i18nl10n_legend},i18nl10n_languages;{pagemounts_legend', 25 | $GLOBALS['TL_DCA']['tl_user']['palettes']['custom'] 26 | ); 27 | 28 | /** 29 | * Fields 30 | */ 31 | $GLOBALS['TL_DCA']['tl_user']['fields']['i18nl10n_languages'] = array 32 | ( 33 | 'label' => &$GLOBALS['TL_LANG']['tl_user']['i18nl10n_languages'], 34 | 'exclude' => true, 35 | 'inputType' => 'checkbox', 36 | 'options_callback' => array('Verstaerker\I18nl10nBundle\Classes\I18nl10n', 'getLanguageOptionsForUserOrGroup'), 37 | 'reference' => &$GLOBALS['TL_LANG']['LNG'], 38 | 'eval' => array( 39 | 'multiple' => true 40 | ), 41 | 'sql' => 'blob NULL' 42 | ); 43 | -------------------------------------------------------------------------------- /src/Resources/contao/languages/en/tl_page.php: -------------------------------------------------------------------------------- 1 | 7 | * @package i18nl10n 8 | * @license LGPLv3 http://www.gnu.org/licenses/lgpl-3.0.html 9 | */ 10 | 11 | 12 | /** 13 | * Fields 14 | */ 15 | $GLOBALS['TL_LANG']['tl_page']['module_i18nl10n'] = 'i18nl10n settings'; 16 | 17 | $GLOBALS['TL_LANG']['tl_page']['i18nl10n_published'] = array 18 | ( 19 | 'Publish L10N', 20 | 'Publish this translation.' 21 | ); 22 | 23 | $GLOBALS['TL_LANG']['tl_page']['i18nl10n_localizations'] = array 24 | ( 25 | 'Site localizations', 26 | 'Additional available languages/localizations for this page tree.' 27 | ); 28 | 29 | $GLOBALS['TL_LANG']['tl_page']['i18nl10n_language'] = 'Language'; 30 | 31 | /** 32 | * Messages 33 | */ 34 | $GLOBALS['TL_LANG']['tl_page']['msg_no_languages'] = 35 | 'No alternative languages have been defined yet. Please do so on the %s settings %s page.'; 36 | $GLOBALS['TL_LANG']['tl_page']['msg_multiple_root'] = 37 | 'i18nl10n discovered multiple root pages in your page structure. Please be aware, that the module is not able to handle multiple page trees!'; 38 | $GLOBALS['TL_LANG']['tl_page']['msg_missing_dns'] = 39 | 'When using more than one root page with i18nl10n, every root page needs a unique domain name! One or more roots are missing this value!'; 40 | $GLOBALS['TL_LANG']['tl_page']['msg_duplicated_dns'] = 41 | 'Some root pages use the same domain value. When using the i18nl10n module only one root page is allowed for a domain.'; -------------------------------------------------------------------------------- /src/Resources/contao/languages/de/tl_page.php: -------------------------------------------------------------------------------- 1 | 7 | * @package i18nl10n 8 | * @license LGPLv3 http://www.gnu.org/licenses/lgpl-3.0.html 9 | */ 10 | 11 | /** 12 | * Fields 13 | */ 14 | $GLOBALS['TL_LANG']['tl_page']['module_i18nl10n'] = 'i18nl10n-Einstellungen'; 15 | 16 | $GLOBALS['TL_LANG']['tl_page']['i18nl10n_published'] = array 17 | ( 18 | 'L10N veröffentlichen', 19 | 'Diese Übersetzung veröffentlichen.' 20 | ); 21 | 22 | $GLOBALS['TL_LANG']['tl_page']['i18nl10n_localizations'] = array 23 | ( 24 | 'Seiten Lokalisierungen', 25 | 'Alternative Sprachen/Lokalisierungen, die für diesen Seitenast zur Verfügung stehen.' 26 | ); 27 | 28 | $GLOBALS['TL_LANG']['tl_page']['i18nl10n_language'] = 'Sprache'; 29 | 30 | /** 31 | * Messages 32 | */ 33 | $GLOBALS['TL_LANG']['tl_page']['msg_no_languages'] = 34 | 'Es wurden noch keine alternativen Sprachen festgelegt. Bitte hole dies noch in den %s Einstellungen %s nach.'; 35 | $GLOBALS['TL_LANG']['tl_page']['msg_multiple_root'] = 36 | 'i18nl10n hat in deiner Seitenstruktur mehr als eine Root-Seite gefunden. Bitte beachte, dass das Modul nicht für die Verwendung mehrerer Root-Seiten ausgelegt ist!'; 37 | $GLOBALS['TL_LANG']['tl_page']['msg_missing_dns'] = 38 | 'Bei der Verwendung von mehr als einer Root-Seite zusammen mit dem i18nl10n Modul muss für jede Root-Seite ein eindeutiger Domainname vergeben werden! Einer oder mehreren Seiten fehlt dieser Wert!'; 39 | $GLOBALS['TL_LANG']['tl_page']['msg_duplicated_dns'] = 40 | 'Einige Root-Seiten besitzen den gleichen DNS-Wert. Bei der Verwendung des Modules i18nl10n ist pro Domain nur eine Root-Seite erlaubt.'; -------------------------------------------------------------------------------- /src/Resources/contao/languages/fr/tl_page.php: -------------------------------------------------------------------------------- 1 | 7 | * @author Web ex Machina (FR Translation) 8 | * @package i18nl10n 9 | * @license LGPLv3 http://www.gnu.org/licenses/lgpl-3.0.html 10 | */ 11 | 12 | 13 | /** 14 | * Fields 15 | */ 16 | $GLOBALS['TL_LANG']['tl_page']['module_i18nl10n'] = 'Paramètres i18nl10n'; 17 | 18 | $GLOBALS['TL_LANG']['tl_page']['i18nl10n_published'] = array 19 | ( 20 | 'Publier L10N', 21 | 'Publier cette traduction.' 22 | ); 23 | 24 | $GLOBALS['TL_LANG']['tl_page']['i18nl10n_localizations'] = array 25 | ( 26 | 'Langues du site', 27 | 'Langues/traductions additionnelles disponibles pour cette arborescence.' 28 | ); 29 | 30 | $GLOBALS['TL_LANG']['tl_page']['i18nl10n_language'] = 'Langue'; 31 | 32 | /** 33 | * Messages 34 | */ 35 | $GLOBALS['TL_LANG']['tl_page']['msg_no_languages'] = 36 | 'Aucune langue alternative n\'a été définie. Veuillez le faire sur les %s paramètres %s page.'; 37 | $GLOBALS['TL_LANG']['tl_page']['msg_multiple_root'] = 38 | 'i18nl10n a découvert plusieurs racines de site dans votre arborescence. Faites attention : ce module ne peut gérer plusieurs arborescences !'; 39 | $GLOBALS['TL_LANG']['tl_page']['msg_missing_dns'] = 40 | 'Quand on utilise plus d\'une racine de site avec i18nl10n, chaque racine de site nécessite un domaine unique ! Cette valeur est absente dans une ou plusieurs racines !'; 41 | $GLOBALS['TL_LANG']['tl_page']['msg_duplicated_dns'] = 42 | 'Certaines racines de site utilisent le même nom de domaine. Quand on utilise le module i18nl10n, seule une racine de site est autorisée pour un domaine.'; -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "exploreimpact/contao-i18nl10n", 3 | "type":"contao-bundle", 4 | "description": "The simplest way to create and manage multi-language sites with Contao.", 5 | "keywords": [ 6 | "Language", 7 | "Multilingual", 8 | "I18N", 9 | "L10N", 10 | "Translation" 11 | ], 12 | "homepage": "https://exploreimpact.de", 13 | "license": "MIT", 14 | "authors": [ 15 | { 16 | "name": "Claudio De Facci", 17 | "email": "claudio@exploreimpact.de", 18 | "homepage": "https://exploreimpact.de", 19 | "role": "Developer" 20 | }, 21 | { 22 | "name": "Patric Eberle", 23 | "email": "line-in@derverstaerker.ch", 24 | "homepage": "http://www.derverstaerker.ch", 25 | "role": "Developer" 26 | } 27 | ], 28 | "require": { 29 | "php": "^5.6|^7.0", 30 | "contao/core-bundle": "^4.4", 31 | "contao-community-alliance/composer-plugin": "*", 32 | "menatwork/contao-multicolumnwizard": "^3.3.12" 33 | }, 34 | "require-dev": { 35 | "contao/manager-plugin": "^2.0", 36 | "codeception/codeception": "*", 37 | "phpmd/phpmd": "^2.2", 38 | "squizlabs/php_codesniffer": "^2.3", 39 | "sebastian/phpcpd": "^2.0", 40 | "phploc/phploc": "^4.0", 41 | "pdepend/pdepend": "^2.1", 42 | "theseer/phpdox": "0.8.1.1" 43 | }, 44 | "autoload":{ 45 | "psr-4": { 46 | "Verstaerker\\I18nl10nBundle\\": "src/" 47 | }, 48 | "classmap": [ 49 | "src/Resources/contao/" 50 | ], 51 | "exclude-from-classmap": [ 52 | "src/Resources/contao/config/", 53 | "src/Resources/contao/dca/", 54 | "src/Resources/contao/languages/", 55 | "src/Resources/contao/templates/" 56 | ] 57 | }, 58 | "extra":{ 59 | "contao-manager-plugin": "Verstaerker\\I18nl10nBundle\\ContaoManager\\Plugin" 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /src/Resources/public/js/i18nl10n.js: -------------------------------------------------------------------------------- 1 | /** 2 | * i18nl10n Contao Module 3 | * 4 | * The i18nl10n module for Contao allows you to manage multilingual content 5 | * on the element level rather than with page trees. 6 | * 7 | * 8 | * @copyright Copyright (c) 2014-2015 Verstärker, Patric Eberle 9 | * @author Patric Eberle 10 | * @package i18nl10n ajax 11 | * @license LGPLv3 http://www.gnu.org/licenses/lgpl-3.0.html 12 | */ 13 | 14 | var I18nl10n = 15 | { 16 | /** 17 | * Toggle the visibility of an l1on translation 18 | * 19 | * @param {object} el The DOM element 20 | * @param {string} id The ID of the target element 21 | * 22 | * @returns {boolean} 23 | */ 24 | toggleL10n: function (el, id) { 25 | 26 | el.blur(); 27 | 28 | var icon = $(el).getFirst('img'); 29 | var flag = $(el).getParent('li').getElement('.i18nl10n_flag'); 30 | var publish = (icon.src.indexOf('invisible') != -1); 31 | var div = el.getParent('div'); 32 | 33 | // Send the request 34 | if (publish) { 35 | // set visible 36 | icon.src = icon.src.replace('invisible.', 'visible.'); 37 | flag.removeClass('is--invisible'); 38 | 39 | new Request.Contao().post({ 40 | action: 'toggleL10n', 41 | id: id, 42 | state: 0, 43 | table: 'tl_page_i18nl10n', 44 | REQUEST_TOKEN: Contao.request_token 45 | }); 46 | } else { 47 | // set invisible 48 | icon.src = icon.src.replace('visible.', 'invisible.'); 49 | flag.addClass('is--invisible'); 50 | 51 | new Request.Contao().post({ 52 | action: 'toggleL10n', 53 | id: id, 54 | state: 1, 55 | REQUEST_TOKEN: Contao.request_token 56 | }); 57 | } 58 | 59 | return false; 60 | } 61 | }; 62 | -------------------------------------------------------------------------------- /src/Hook/InitializeSystemHook.php: -------------------------------------------------------------------------------- 1 | import('request_stack', 'request_stack'); 27 | $this->request = $this->request_stack->getCurrentRequest(); 28 | } 29 | 30 | 31 | /** 32 | * @throws NoRootPageException 33 | */ 34 | public function initializeSystem() 35 | { 36 | // Show all contents in Backend 37 | if (TL_MODE !== 'FE') { 38 | return true; 39 | } 40 | 41 | // Catch Facebook token fbclid and redirect without him (trigger 404 errors)... 42 | if (strpos(\Contao\Environment::get('request'), '?fbclid')) { 43 | \Contao\Controller::redirect(\strtok(\Contao\Environment::get('request'), '?')); 44 | } 45 | 46 | // Get locale information for system and user 47 | $arrLanguages = I18nl10n::getInstance()->getAvailableLanguages(); 48 | $userLanguage = $this->request->getLocale(); 49 | 50 | 51 | // Fail if no languages were configured 52 | if (\count($arrLanguages) === 0) { 53 | throw new NoRootPageException(); 54 | } 55 | 56 | // Fallback to default language if language of request does not exist 57 | $languages = $arrLanguages[$_SERVER['HTTP_HOST']] ?: $arrLanguages['*']; 58 | if (!\in_array($userLanguage, $languages['languages'])) { 59 | $GLOBALS['TL_LANGUAGE'] = $languages['default']; 60 | } 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /src/Resources/contao/widgets/I18nl10nMetaWizard.php: -------------------------------------------------------------------------------- 1 | 11 | * @package i18nl10n classes 12 | * @license LGPLv3 http://www.gnu.org/licenses/lgpl-3.0.html 13 | */ 14 | 15 | namespace Verstaerker\I18nl10nBundle\Widgets; 16 | 17 | use Verstaerker\I18nl10nBundle\Classes\I18nl10n; 18 | 19 | class I18nl10nMetaWizard extends \MetaWizard 20 | { 21 | /** 22 | * Generate file i18nl10n meta wizard 23 | * 24 | * @return string 25 | */ 26 | public function generate() 27 | { 28 | $strForm = parent::generate(); 29 | 30 | $arrAvailableLanguages = I18nl10n::getInstance()->getAvailableLanguages(true, true); 31 | $arrLanguages = array_intersect_key($this->getLanguages(), array_flip($arrAvailableLanguages)); 32 | preg_match_all('@data-language="(.*?)"@', $strForm, $arrMatchTaken); 33 | 34 | $options = array(''); 35 | $taken = array(); 36 | 37 | // Parse used languages 38 | foreach ($arrMatchTaken as $k => $v) { 39 | if ($k) { 40 | $taken[] = $v[0]; 41 | } 42 | } 43 | 44 | // Set language options 45 | foreach ($arrLanguages as $k => $v) { 46 | $options[] = ''; 53 | } 54 | 55 | // Replace language select options 56 | $strForm = preg_replace( 57 | '@()(.*?)(<\/select>)@', 58 | '${1}' . implode('', $options) . '${3}', 59 | $strForm 60 | ); 61 | 62 | return $strForm; 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | All notable changes to this project will be documented in this file. 3 | 4 | ## [Unreleased] 5 | - Update for set of flags 6 | - New Sitemap Module 7 | - Do not define page title by page name, when title field is empty 8 | - Define keywords on Multilingual Pages 9 | 10 | ## [2.1.0] - t.b.r. 11 | ### Added 12 | - Added support for regional language codes (e.g. de-CH). 13 | 14 | ### Fixed 15 | - Fixed issue where alias of default language was picked for alternative languages when site was entered on root (/). 16 | 17 | ## [2.0.0-beta2] - 2018-04-19 18 | ### Added 19 | - Added more detailed installation instructions including configuration step. 20 | 21 | ### Changed 22 | - Moved replaceInsertTags hook to its own class. 23 | 24 | ### Fixed 25 | - Fixed bug in PageI18nl10nRegular.php that prevented ESI tags from getting rendered when cache is active. 26 | - Fixed from asset path for extension's CSS files. 27 | 28 | ## [2.0.0-beta] - 2018-01-27 29 | ### Added 30 | - Tests and lints by @ClaudioDeFacci. 31 | 32 | ### Changed 33 | - Refactored extension to work in Contao 4.4.7 by @ClaudioDeFacci. 34 | - Created compatibility with PHP 7 by @ClaudioDeFacci. 35 | 36 | ### Removed 37 | - Removed support for Isotope by @ClaudioDeFacci. 38 | 39 | ## [1.5] - 2015 40 | ### Added 41 | - Define languages based on Contao root site structure settings 42 | - Module to switch languages in frontend 43 | - Compatibility with multidomain environments 44 | - Compatibility with isotope (1.3.1) 45 | - Articles section 46 | - Define language for each content element 47 | - Possibility to choose Neutral language (shows for all languages) 48 | - Filter for specific language content elements 49 | - Multilingual Pages section 50 | - Define visibility 51 | - Define titles 52 | - Define alias 53 | - Define description 54 | - Define Localized date and time settings 55 | - Generate all missing multilingual pages 56 | - Site structure 57 | - Automatically generate multilingual pages (Publish L10N) 58 | - Button for editing the Multilingual pages (doesn't work, just links to MP section) 59 | -------------------------------------------------------------------------------- /src/Hook/GetSearchablePagesHook.php: -------------------------------------------------------------------------------- 1 | query(" 30 | SELECT p.*, i.alias as i18nl10n_alias, i.language as i18nl10n_language, i.title as i18nl10n_title 31 | FROM tl_page as p 32 | LEFT JOIN tl_page_i18nl10n as i ON p.id = i.pid 33 | WHERE (p.start = '' OR p.start < $time) 34 | AND (p.stop = '' OR p.stop > $time) 35 | AND p.published = 1 36 | AND i.i18nl10n_published = 1 37 | AND p.type != 'root' 38 | ORDER BY p.sorting; 39 | "); 40 | 41 | while ($objPages->next()) { 42 | if (!$objPages->protected || \Config::get('indexProtected')) { 43 | $objPageWithDetails = \PageModel::findWithDetails($objPages->id); 44 | 45 | // Replace tl_page values with localized information 46 | $objPages->language = $objPages->i18nl10n_language; 47 | $objPages->alias = $objPages->i18nl10n_alias; 48 | $objPages->title = $objPages->i18nl10n_title; 49 | $objPages->forceRowLanguage = true; 50 | 51 | // Create URL 52 | $strUrl = \Controller::generateFrontendUrl($objPages->row()); 53 | $strUrl = ($objPageWithDetails->rootUseSSL ? 'https://' : 'http://') 54 | . ($objPageWithDetails->domain ?: \Environment::get('host')) 55 | . '/' 56 | . $strUrl; 57 | 58 | // Append URL 59 | $arrL10nPages[] = $strUrl; 60 | } 61 | } 62 | 63 | return array_merge($arrPages, $arrL10nPages); 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /src/Hook/GenerateBreadcrumbHook.php: -------------------------------------------------------------------------------- 1 | $time) AND i18nl10n_published = 1 "; 35 | 36 | $sql = 'SELECT * FROM tl_page_i18nl10n WHERE ' 37 | . $database->findInSet('pid', $arrPages) 38 | . ' AND language = ? ' 39 | . $sqlPublishedCondition; 40 | 41 | $arrL10n = $database 42 | ->prepare($sql) 43 | ->execute($GLOBALS['TL_LANGUAGE']) 44 | ->fetchAllAssoc(); 45 | 46 | // if translated page, replace given fields in element array 47 | if (count($arrL10n) > 0) { 48 | // each breadcrumb element 49 | for ($i = 0; count($arrItems) > $i; $i++) { 50 | // each translation 51 | foreach ($arrL10n as $l10n) { 52 | // if translation for actual breadcrumb element 53 | if ($arrItems[$i]['isRoot'] && $arrItems[$i]['data']['pid'] == $l10n['pid'] 54 | || !$arrItems[$i]['isRoot'] && $arrItems[$i]['data']['id'] == $l10n['pid'] 55 | ) { 56 | if ($l10n['pageTitle']) { 57 | $arrItems[$i]['title'] = $l10n['pageTitle']; 58 | } 59 | if ($l10n['title']) { 60 | $arrItems[$i]['link'] = $l10n['title']; 61 | } 62 | break; 63 | } 64 | } 65 | } 66 | } 67 | 68 | return $arrItems; 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /src/Resources/public/css/style.css: -------------------------------------------------------------------------------- 1 | /** 2 | * @Section Extending Contao style 3 | ******************************************************* 4 | */ 5 | .tl_listing .tl_left { 6 | width: 400px; 7 | } 8 | 9 | ul.level_1 .tl_left { 10 | width: 380px; 11 | } 12 | 13 | ul.level_2 .tl_left { 14 | width: 360px; 15 | } 16 | 17 | ul.level_3 .tl_left { 18 | width: 340px; 19 | } 20 | 21 | ul.level_4 .tl_left { 22 | width: 320px; 23 | } 24 | 25 | ul.level_5 .tl_left { 26 | width: 300px; 27 | } 28 | 29 | 30 | /** 31 | * @Section i18nl10n styles 32 | ******************************************************* 33 | */ 34 | .header_l10n_localize_all { 35 | background: url("../img/localize_all.png") no-repeat scroll left center transparent; 36 | padding: 2px 0 3px 20px; 37 | margin-left: 15px; 38 | } 39 | 40 | .header_l10n_define_language { 41 | background: url("../img/i18nl10n.png") no-repeat scroll left center transparent; 42 | padding: 2px 0 3px 20px; 43 | margin-left: 15px; 44 | } 45 | 46 | .i18nl10n_message { 47 | text-align: left; 48 | line-height: 120%; 49 | padding: 0.5em; 50 | font-weight: bold; 51 | background: #fea; 52 | border: 1px solid #D49822; 53 | margin-bottom: 20px; 54 | } 55 | 56 | .i18nl10n_message .tl_submit_container { 57 | background: none; 58 | border-top: 1px solid #D49822; 59 | text-align: right; 60 | margin-top: 0.5em; 61 | padding: 0.5em; 62 | } 63 | 64 | .i18nl10n_message .tl_submit { 65 | margin-left: 10px; 66 | } 67 | 68 | .i18nl10n_message a { 69 | color: #666966; 70 | font-weight: bold; 71 | text-decoration: underline; 72 | } 73 | 74 | .i18nl10n_message a:hover { 75 | color: #d00; 76 | } 77 | 78 | .i18nl10n_flag, 79 | .tree_view img.i18nl10n_flag { 80 | display: inline-block; 81 | vertical-align: middle; 82 | } 83 | 84 | .i18nl10n_flag.is--invisible { 85 | opacity: 0.25; 86 | } 87 | 88 | .i18nl10n_page { 89 | color: #b3b3b3; 90 | padding-left: 3px; 91 | } 92 | 93 | p + .i18nl10n_localize { 94 | margin-top: 10px; 95 | } 96 | 97 | .i18nl10n_localize_list { 98 | margin: 10px 0; 99 | } 100 | 101 | .i18nl10n_localize_domain { 102 | margin-bottom: 20px; 103 | } 104 | 105 | .i18nl10n_localize_domain ul { 106 | margin: 5px 0 0 20px; 107 | } 108 | 109 | .i18nl10n_localize_domain li { 110 | margin-bottom: 5px; 111 | } 112 | 113 | .tree_view .tl_listing img.i18nl10n_article_flag, 114 | .i18nl10n_content_flag { 115 | vertical-align: middle; 116 | } 117 | 118 | .tree_view .tl_listing img.i18nl10n_article_flag { 119 | margin-left: 5px; 120 | } 121 | 122 | .tl_message_link { 123 | text-decoration: underline; 124 | } -------------------------------------------------------------------------------- /src/Resources/contao/dca/tl_module.php: -------------------------------------------------------------------------------- 1 | 11 | * @package i18nl10n dca 12 | * @license LGPLv3 http://www.gnu.org/licenses/lgpl-3.0.html 13 | */ 14 | 15 | 16 | // Palettes 17 | $GLOBALS['TL_DCA']['tl_module']['palettes']['i18nl10nLanguageSelection'] = ' 18 | {title_legend},name,headline,type; 19 | {template_legend},i18nl10n_langTpl,i18nl10n_langStyle,i18nl10n_langHide; 20 | {protected_legend:hide},protected; 21 | {expert_legend:hide},guests,cssID,space 22 | '; 23 | 24 | $i18nl10nLanguageSelection = array 25 | ( 26 | 'i18nl10n_langTpl' => array 27 | ( 28 | 'label' => &$GLOBALS['TL_LANG']['tl_module']['i18nl10n_langTpl'], 29 | 'exclude' => true, 30 | 'inputType' => 'select', 31 | 'options_callback' => array('tl_module_l10n', 'getLanguageTemplates'), 32 | 'default' => 'lang_default', 33 | 'eval' => array 34 | ( 35 | 'tl_class' => 'w50' 36 | ), 37 | 'sql' => "varchar(64) NOT NULL default ''" 38 | ), 39 | 'i18nl10n_langStyle' => array 40 | ( 41 | 'label' => &$GLOBALS['TL_LANG']['tl_module']['i18nl10n_langStyle'], 42 | 'exclude' => true, 43 | 'inputType' => 'radio', 44 | 'default' => 'full', 45 | 'options' => array('full', 'text', 'image', 'iso', 'disable'), 46 | 'reference' => &$GLOBALS['TL_LANG']['tl_module']['i18nl10n_langStyleLabels'], 47 | 'eval' => array 48 | ( 49 | 'tl_class' => 'w50 autoheight' 50 | ), 51 | 'sql' => "varchar(64) NOT NULL default ''" 52 | ), 53 | 'i18nl10n_langHide' => array 54 | ( 55 | 'label' => &$GLOBALS['TL_LANG']['tl_module']['i18nl10n_langHide'], 56 | 'exclude' => true, 57 | 'inputType' => 'checkbox', 58 | 'eval' => array 59 | ( 60 | 'tl_class' => 'clr' 61 | ), 62 | 'sql' => "char(1) NOT NULL default ''" 63 | ) 64 | 65 | ); 66 | 67 | array_insert( 68 | $GLOBALS['TL_DCA']['tl_module']['fields'], 69 | count($GLOBALS['TL_DCA']['tl_module']['fields']) + 1, 70 | $i18nl10nLanguageSelection 71 | ); 72 | 73 | 74 | class tl_module_l10n extends Backend 75 | { 76 | 77 | /** 78 | * Return all navigation templates as array 79 | * 80 | * @returns array 81 | */ 82 | public function getLanguageTemplates() 83 | { 84 | return $this->getTemplateGroup('lang_'); 85 | } 86 | 87 | } -------------------------------------------------------------------------------- /src/Resources/contao/dca/tl_article.php: -------------------------------------------------------------------------------- 1 | 10 | * @package i18nl10n dca 11 | * @license LGPLv3 http://www.gnu.org/licenses/lgpl-3.0.html 12 | */ 13 | 14 | 15 | /** 16 | * Class tl_article_l10n 17 | */ 18 | class tl_article_l10n extends tl_article 19 | { 20 | /** 21 | * Label callback for list view 22 | * 23 | * Append language flags to article entries 24 | * 25 | * @param $arrArgs 26 | * @param null $arrVendorCallback 27 | * 28 | * @return string 29 | */ 30 | public function labelCallback($arrArgs, $arrVendorCallback = null) 31 | { 32 | $strElement = ''; 33 | 34 | // Callback should always be available, since it's part of the basic DCA 35 | if (is_array($arrVendorCallback)) { 36 | $vendorClass = new $arrVendorCallback[0]; 37 | $strElement = call_user_func_array(array($vendorClass, $arrVendorCallback[1]), $arrArgs); 38 | } elseif (is_callable($arrVendorCallback)) { 39 | $strElement = call_user_func_array($arrVendorCallback, $arrArgs); 40 | } 41 | 42 | return $this->addIcon($arrArgs[0], $strElement); 43 | } 44 | 45 | /** 46 | * Add summary of elements by language as tooltip 47 | * 48 | * @param Array $row 49 | * @param String $label 50 | * 51 | * @return string 52 | */ 53 | public function addIcon($row, $label) 54 | { 55 | 56 | $sql = 'SELECT COUNT(id) items, language FROM tl_content WHERE pid =? GROUP BY language'; 57 | 58 | // count content elements in different languages and display them 59 | $items = \Database::getInstance() 60 | ->prepare($sql) 61 | ->execute($row['id']) 62 | ->fetchAllAssoc(); 63 | 64 | // build icon elements 65 | if (!empty($items)) 66 | { 67 | foreach ($items as $l10nItem) 68 | { 69 | $count = $l10nItem['items']; 70 | $title = $GLOBALS['TL_LANG']['LNG'][$l10nItem['language']] . ": $count " . $GLOBALS['TL_LANG']['tl_article']['elements']; 71 | $l10nItemIcon = 'bundles/verstaerkeri18nl10n/img/i18nl10n.png'; 72 | 73 | if ($l10nItem['language']) 74 | { 75 | $l10nItemIcon = 'bundles/verstaerkeri18nl10n/img/flag_icons/' . $l10nItem['language'] . '.png'; 76 | } 77 | 78 | $label .= ''; 79 | } 80 | } 81 | 82 | return $label; 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /src/Hook/ReplaceInsertTagsHook.php: -------------------------------------------------------------------------------- 1 | findL10nWithDetails($arrArguments[2], $GLOBALS['TL_LANGUAGE']); 33 | 34 | if ($objNextPage === null) { 35 | return false; 36 | } 37 | 38 | switch ($objNextPage->type) { 39 | case 'redirect': 40 | $strUrl = \Controller::replaceInsertTags($objNextPage->url); 41 | 42 | if (strncasecmp($strUrl, 'mailto:', 7) === 0) { 43 | $strUrl = \StringUtil::encodeEmail($strUrl); 44 | } 45 | break; 46 | 47 | case 'forward': 48 | $intForwardId = $objNextPage->jumpTo ?: \PageModel::findFirstPublishedByPid($objNextPage->id) 49 | ->current()->id; 50 | 51 | $objNext = \PageModel::findWithDetails($intForwardId); 52 | 53 | if ($objNext !== null) { 54 | $strUrl = I18nl10n::generateFrontendUrl($objNext->row(), null, ''); 55 | break; 56 | } 57 | 58 | // no break 59 | default: 60 | $strUrl = I18nl10n::generateFrontendUrl($objNextPage->row(), null, ''); 61 | break; 62 | } 63 | 64 | $strName = $objNextPage->title; 65 | $strTarget = $objNextPage->target ? 66 | (($objPage->outputFormat == 'xhtml') ? LINK_NEW_WINDOW : ' target="_blank"') : ''; 67 | $strTitle = $objNextPage->pageTitle ?: $objNextPage->title; 68 | 69 | switch ($arrArguments[1]) { 70 | case 'link': 71 | return sprintf( 72 | '%s', 73 | $strUrl, 74 | specialchars($strTitle), 75 | $strTarget, 76 | specialchars($strName) 77 | ); 78 | break; 79 | 80 | case 'link_url': 81 | return $strUrl; 82 | break; 83 | 84 | case 'link_title': 85 | return $objNextPage->pageTitle ?: $objNextPage->title; 86 | break; 87 | 88 | case 'link_name': 89 | return $objNextPage->title; 90 | break; 91 | 92 | default: 93 | return false; 94 | } 95 | 96 | return false; 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /src/Resources/contao/languages/en/tl_page_i18nl10n.php: -------------------------------------------------------------------------------- 1 | 7 | * @package i18nl10n 8 | * @license LGPLv3 http://www.gnu.org/licenses/lgpl-3.0.html 9 | */ 10 | 11 | 12 | /** 13 | * Legends & Fields 14 | */ 15 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['i18nl10n_legend'] = 'L10N Settings'; 16 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['redirect_legend'] = 'Redirect'; // For some unknown reason this is not taken form tl_page 17 | 18 | $GLOBALS['TL_LANG']['tl_page_i18nl10n'][''] = array 19 | ( 20 | '', 21 | '' 22 | ); 23 | 24 | /** 25 | * References 26 | */ 27 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['i18nl10n_menuLegend'] = 'Localized fields for menus and URL'; 28 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['i18nl10n_metaLegend'] = 'Localized meta information'; 29 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['i18nl10n_timeLegend'] = 'Localized date and time settings'; 30 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['i18nl10n_expertLegend'] = &$GLOBALS['TL_LANG']['tl_page']['expert_legend']; 31 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['publish_legend'] = &$GLOBALS['TL_LANG']['tl_page']['publish_legend']; 32 | 33 | /** 34 | * Buttons 35 | */ 36 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['new'] = array 37 | ( 38 | 'New L10N', 39 | 'Add new localization for page' 40 | ); 41 | 42 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['define_language'] = array 43 | ( 44 | 'Languages', 45 | 'Define languages on settings page' 46 | ); 47 | 48 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['edit'] = array 49 | ( 50 | 'Edit', 51 | 'Edit localization %s' 52 | ); 53 | 54 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['copy'] = array 55 | ( 56 | 'Copy', 57 | 'Copy localization' 58 | ); 59 | 60 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['delete'] = array 61 | ( 62 | 'Delete', 63 | 'Delete localization' 64 | ); 65 | 66 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['toggle'] = array 67 | ( 68 | 'Publish/unpublish L10N', 69 | 'Publish/unpublish L10N ID %s' 70 | ); 71 | 72 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['show'] = array 73 | ( 74 | 'Show', 75 | 'meta-fields' 76 | ); 77 | 78 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['localize_all'] = array 79 | ( 80 | 'L10N for аll', 81 | 'Localize all untranslated pages to available languages' 82 | ); 83 | 84 | /** 85 | * Messages 86 | */ 87 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['msg_no_root'] = 88 | 'No root pages defined yet. Please do so on "%s"'; 89 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['msg_no_languages'] = 90 | 'No alternative languages for i18nl10n have been defined yet. Please do so with the root pages on "%s".'; 91 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['msg_some_languages'] = 92 | 'Some root pages have no language alternatives.'; 93 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['msg_localize_all'] = 94 | 'I will create localizations for all missing translations based on the following list (based on user permissions). Are you sure you want to continue?'; 95 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['no_languages'] = 'No languages'; -------------------------------------------------------------------------------- /src/Resources/contao/languages/de/tl_page_i18nl10n.php: -------------------------------------------------------------------------------- 1 | 7 | * @package i18nl10n 8 | * @license LGPLv3 http://www.gnu.org/licenses/lgpl-3.0.html 9 | */ 10 | 11 | 12 | /** 13 | * Legends & Fields 14 | */ 15 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['i18nl10n_legend'] = 'L10N Einstellungen'; 16 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['redirect_legend'] = 'Weiterleitung'; // For some unknown reason this is not taken form tl_page 17 | 18 | $GLOBALS['TL_LANG']['tl_page_i18nl10n'][''] = array 19 | ( 20 | '', 21 | '' 22 | ); 23 | 24 | /** 25 | * References 26 | */ 27 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['i18nl10n_menuLegend'] = 'Lokalisierte Felder für Menüs und URLs'; 28 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['i18nl10n_metaLegend'] = 'Lokalisierte Meta-Informationen'; 29 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['i18nl10n_timeLegend'] = 'Lokalisierte Datums- und Zeiteinstellungen'; 30 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['i18nl10n_expertLegend'] = &$GLOBALS['TL_LANG']['tl_page']['expert_legend']; 31 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['publish_legend'] = &$GLOBALS['TL_LANG']['tl_page']['publish_legend']; 32 | 33 | /** 34 | * Buttons 35 | */ 36 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['new'] = array 37 | ( 38 | 'Neue L10N', 39 | 'Eine neue Lokalisierung für eine Seite erstellen' 40 | ); 41 | 42 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['define_language'] = array 43 | ( 44 | 'Sprachen', 45 | 'Verfügbare Sprachen in den Einstellungen festlegen' 46 | ); 47 | 48 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['edit'] = array 49 | ( 50 | 'Bearbeiten', 51 | 'Lokalisierung mit der ID %s bearbeiten' 52 | ); 53 | 54 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['copy'] = array 55 | ( 56 | 'Kopieren', 57 | 'Lokalisierung kopieren' 58 | ); 59 | 60 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['delete'] = array 61 | ( 62 | 'Löschen', 63 | 'Lokalisierung löschen' 64 | ); 65 | 66 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['toggle'] = array 67 | ( 68 | 'L10N veröffentlichen/unveröffentlichen', 69 | 'L10N mit der ID %s veröffentlichen/unveröffentlichen' 70 | ); 71 | 72 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['show'] = array 73 | ( 74 | 'Show', 75 | 'Meta-Informationen' 76 | ); 77 | 78 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['localize_all'] = array 79 | ( 80 | 'L10N für alle', 81 | 'Alle Seiten in allen verfügbaren Sprachen lokalisierung.' 82 | ); 83 | 84 | 85 | /** 86 | * Messages 87 | */ 88 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['msg_no_root'] = 89 | 'Es wurden noch keine Root-Seiten erstellt. Bitte hole dies über "%s" nach.'; 90 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['msg_no_languages'] = 91 | 'Es wurden noch keine alternativen Sprachen festgelegt. Bitte hole dies noch im jeweiligen Startpunkt unter "%s" nach.'; 92 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['msg_some_languages'] = 93 | 'Einige Root-Seiten besitzen keine alternativen Sprachen.'; 94 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['msg_localize_all'] = 95 | 'Ich werde für jede fehlenden Übersetzung eine lokalisierte Seite gemäss der angezeigten Liste anlegen (basierend auf Benutzerrechten). Möchtest du wirklich fortfahren?'; 96 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['no_languages'] = 'Keine Sprachen'; -------------------------------------------------------------------------------- /src/Resources/contao/languages/fr/tl_page_i18nl10n.php: -------------------------------------------------------------------------------- 1 | 7 | * @author Web ex Machina (FR Translation) 8 | * @package i18nl10n 9 | * @license LGPLv3 http://www.gnu.org/licenses/lgpl-3.0.html 10 | */ 11 | 12 | 13 | /** 14 | * Legends & Fields 15 | */ 16 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['i18nl10n_legend'] = 'Paramètres L10N'; 17 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['redirect_legend'] = 'Redirection'; // For some unknown reason this is not taken form tl_page 18 | 19 | $GLOBALS['TL_LANG']['tl_page_i18nl10n'][''] = array 20 | ( 21 | '', 22 | '' 23 | ); 24 | 25 | /** 26 | * References 27 | */ 28 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['i18nl10n_menuLegend'] = 'Champs traduits pour les menus et l\'adresse'; 29 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['i18nl10n_metaLegend'] = 'Traduction des meta-données'; 30 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['i18nl10n_timeLegend'] = 'Paramètres de traduction pour la date et l\'heure'; 31 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['i18nl10n_expertLegend'] = &$GLOBALS['TL_LANG']['tl_page']['expert_legend']; 32 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['publish_legend'] = &$GLOBALS['TL_LANG']['tl_page']['publish_legend']; 33 | 34 | /** 35 | * Buttons 36 | */ 37 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['new'] = array 38 | ( 39 | 'Nouvelle L10N', 40 | 'Ajoutez une traduction pour la page' 41 | ); 42 | 43 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['define_language'] = array 44 | ( 45 | 'Langues', 46 | 'Définissez les langues dans la page de configuration' 47 | ); 48 | 49 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['edit'] = array 50 | ( 51 | 'Éditer', 52 | 'Éditer la traduction %s' 53 | ); 54 | 55 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['copy'] = array 56 | ( 57 | 'Dupliquer', 58 | 'Dupliquer la traduction' 59 | ); 60 | 61 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['delete'] = array 62 | ( 63 | 'Supprimer', 64 | 'Supprimer la traduction' 65 | ); 66 | 67 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['toggle'] = array 68 | ( 69 | 'Publier/Dépublier L10N', 70 | 'Publier/Dépublier L10N ID %s' 71 | ); 72 | 73 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['show'] = array 74 | ( 75 | 'Afficher', 76 | 'Afficher la traduction' 77 | ); 78 | 79 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['localize_all'] = array 80 | ( 81 | 'L10N pour tout', 82 | 'Traduire toutes les pages ne comportant pas de traductions avec les langues disponibles' 83 | ); 84 | 85 | /** 86 | * Messages 87 | */ 88 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['msg_no_root'] = 89 | 'Pas de racine de site définie. Veuillez le faire dans le menu "%s"'; 90 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['msg_no_languages'] = 91 | 'Pas de langues alternatives configurées pour i18nl10n. Veuillez le faire dans les racines de site du menu "%s".'; 92 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['msg_some_languages'] = 93 | 'Des racines de site n\'ont pas de langues alternatives.'; 94 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['msg_localize_all'] = 95 | 'Je vais créer des traductions pour toutes les traductions manquantes basée sur la liste suivante (et sur les droits de l\'utilisateur). Êtes-vous sûr de vouloir continuer ?'; 96 | $GLOBALS['TL_LANG']['tl_page_i18nl10n']['no_languages'] = 'Pas de langues'; -------------------------------------------------------------------------------- /src/Hook/GenerateFrontendUrlHook.php: -------------------------------------------------------------------------------- 1 | getLanguagesByDomain() not valid in BE, since the domain is taken from url 25 | */ 26 | public function generateFrontendUrl($arrRow, $strParams, $strUrl) 27 | { 28 | if (!is_array($arrRow)) { 29 | throw new \Exception('not an associative array.'); 30 | } 31 | 32 | // @todo: Call I18nl10n as service, not singleton pattern 33 | $arrLanguages = I18nl10n::getInstance()->getLanguagesByDomain(); 34 | $arrL10nAlias = null; 35 | 36 | // Append language if existing and forced (by i18nl10n) 37 | $language = empty($arrRow['language']) || empty($arrRow['forceRowLanguage']) 38 | ? $GLOBALS['TL_LANGUAGE'] 39 | : $arrRow['language']; 40 | 41 | // Do not look for a translation page if there is an alias given already existing in the language we want 42 | if ($arrRow['alias']) { 43 | $objAlias = \Database::getInstance() 44 | ->prepare('SELECT alias FROM tl_page_i18nl10n WHERE alias = ? AND language = ?') 45 | ->limit(1) 46 | ->execute($arrRow['alias'], $language); 47 | } 48 | 49 | // Try to get l10n alias by language and pid 50 | if ($language !== $arrLanguages['default']) { 51 | $database = \Database::getInstance(); 52 | $arrL10nAlias = $database 53 | ->prepare('SELECT alias FROM tl_page_i18nl10n WHERE pid = ? AND language = ?') 54 | ->execute($arrRow['id'], $language) 55 | ->fetchAssoc(); 56 | } 57 | 58 | $alias = is_array($arrL10nAlias) 59 | ? $arrL10nAlias['alias'] 60 | : $arrRow['alias']; 61 | 62 | // Remove auto_item and language 63 | $regex = '@/auto_item|/language/[a-z]{2}|[\?&]language=[a-z]{2}@'; 64 | $strParams = preg_replace($regex, '', $strParams); 65 | $strUrl = preg_replace($regex, '', $strUrl); 66 | 67 | // If alias is disabled add language to get param end return 68 | if (\Config::get('disableAlias')) { 69 | $missingValueRegex = '@(.*\?[^&]*&)([^&]*)=(?=$|&)(&.*)?@'; 70 | 71 | if (\Config::get('useAutoItem') && preg_match($missingValueRegex, $strUrl) == 1) { 72 | $strUrl = preg_replace($missingValueRegex, '${1}auto_item=${2}${3}', $strUrl); 73 | } 74 | 75 | return $strUrl . '&language=' . $language; 76 | } 77 | 78 | // Create i18n URL 79 | $strL10nUrl = $language . '/' . $alias . $strParams . \Config::get('urlSuffix'); 80 | 81 | // Catch "/" page aliases and do not add suffix to them (as they are considered as base request) 82 | if ($strL10nUrl == $language."//".\Config::get('urlSuffix')) { 83 | $strL10nUrl = $language."/"; 84 | } 85 | 86 | // Finally, if the basic url contains the domain, it means we want an absolute URL, so keep it this way 87 | if (false !== strpos($strUrl, \Environment::get('base'))) { 88 | $strL10nUrl = ($arrRow['rootUseSSL'] ? 'https://' : 'http://') 89 | . ($arrRow['domain'] ?: \Environment::get('host')) 90 | . '/' 91 | . $strL10nUrl; 92 | } 93 | 94 | return $strL10nUrl; 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /src/Resources/contao/config/config.php: -------------------------------------------------------------------------------- 1 | 11 | * @package i18nl10n config 12 | * @license LGPLv3 http://www.gnu.org/licenses/lgpl-3.0.html 13 | */ 14 | 15 | /** 16 | * BACK END MODULES 17 | */ 18 | // Extend header includes 19 | if (TL_MODE == 'BE') { 20 | // CSS files 21 | $GLOBALS['TL_CSS'][] = 'bundles/verstaerkeri18nl10n/css/style.css'; 22 | 23 | // JS files 24 | $GLOBALS['TL_JAVASCRIPT'][] = 'bundles/verstaerkeri18nl10n/js/i18nl10n.js'; 25 | } 26 | 27 | // Append be module to sidebar 28 | \array_insert( 29 | $GLOBALS['BE_MOD']['design'], 30 | \array_search('page', \array_keys($GLOBALS['BE_MOD']['design'])) + 1, 31 | [ 32 | 'i18nl10n' => [ 33 | 'tables' => ['tl_page_i18nl10n'], 34 | 'icon' => 'bundles/verstaerkeri18nl10n/img/i18nl10n.png' 35 | ] 36 | ] 37 | ); 38 | 39 | /** 40 | * FRONT END MODULES 41 | */ 42 | $GLOBALS['FE_MOD']['i18nl10n']['i18nl10nLanguageSelection'] = 'Verstaerker\I18nl10nBundle\Modules\ModuleI18nl10nLanguageSelection'; 43 | 44 | 45 | /** 46 | * HOOKS 47 | */ 48 | $GLOBALS['TL_HOOKS']['initializeSystem'][] = ['Verstaerker\I18nl10nBundle\Hook\InitializeSystemHook', 'initializeSystem']; 49 | $GLOBALS['TL_HOOKS']['generateFrontendUrl'][] = ['Verstaerker\I18nl10nBundle\Hook\GenerateFrontendUrlHook', 'generateFrontendUrl']; 50 | $GLOBALS['TL_HOOKS']['getPageIdFromUrl'][] = ['Verstaerker\I18nl10nBundle\Hook\GetPageIdFromUrlHook', 'getPageIdFromUrl']; 51 | $GLOBALS['TL_HOOKS']['generateBreadcrumb'][] = ['Verstaerker\I18nl10nBundle\Hook\GenerateBreadcrumbHook', 'generateBreadcrumb']; 52 | $GLOBALS['TL_HOOKS']['executePostActions'][] = ['Verstaerker\I18nl10nBundle\Hook\ExecutePostActionsHook', 'executePostActions']; 53 | $GLOBALS['TL_HOOKS']['isVisibleElement'][] = ['Verstaerker\I18nl10nBundle\Hook\IsVisibleElementHook', 'isVisibleElement']; 54 | $GLOBALS['TL_HOOKS']['replaceInsertTags'][] = ['Verstaerker\I18nl10nBundle\Hook\ReplaceInsertTagsHook', 'replaceInsertTags']; 55 | $GLOBALS['TL_HOOKS']['loadDataContainer'][] = ['Verstaerker\I18nl10nBundle\Hook\LoadDataContainerHook', 'setLanguages']; 56 | $GLOBALS['TL_HOOKS']['getArticle'][] = ['Verstaerker\I18nl10nBundle\Hook\GetArticleHook', 'checkIfEmpty']; 57 | 58 | // Append language selection for tl_content 59 | $GLOBALS['TL_HOOKS']['loadDataContainer'][] = ['Verstaerker\I18nl10nBundle\Hook\LoadDataContainerHook', 'appendLanguageSelectCallback']; 60 | 61 | // Append button callback for tl_content to introduce permission 62 | $GLOBALS['TL_HOOKS']['loadDataContainer'][] = ['Verstaerker\I18nl10nBundle\Hook\LoadDataContainerHook', 'appendButtonCallback']; 63 | 64 | // Append label callback for tl_article labels 65 | $GLOBALS['TL_HOOKS']['loadDataContainer'][] = ['Verstaerker\I18nl10nBundle\Hook\LoadDataContainerHook', 'appendLabelCallback']; 66 | 67 | // Append child record callback for tl_content labels 68 | $GLOBALS['TL_HOOKS']['loadDataContainer'][] = ['Verstaerker\I18nl10nBundle\Hook\LoadDataContainerHook', 'appendChildRecordCallback']; 69 | 70 | // Search indexation 71 | $GLOBALS['TL_HOOKS']['indexPage'][] = ['Verstaerker\I18nl10nBundle\Hook\IndexPageHook', 'indexPage']; 72 | $GLOBALS['TL_HOOKS']['getSearchablePages'][] = ['Verstaerker\I18nl10nBundle\Hook\GetSearchablePagesHook', 'getSearchablePages']; 73 | $GLOBALS['TL_HOOKS']['customizeSearch'][] = ['Verstaerker\I18nl10nBundle\Hook\CustomizeSearchHook', 'customizeSearch']; 74 | 75 | 76 | /** 77 | * PAGE TYPES 78 | */ 79 | $GLOBALS['TL_PTY']['regular'] = 'Verstaerker\I18nl10nBundle\Pages\PageI18nl10nRegular'; 80 | 81 | 82 | /** 83 | * Inherit language permissions 84 | */ 85 | $GLOBALS['TL_PERMISSIONS'][] = 'i18nl10n_languages'; 86 | 87 | 88 | /** 89 | * Adding custom widgets 90 | */ 91 | $GLOBALS['BE_FFL']['i18nl10nMetaWizard'] = 'Verstaerker\I18nl10nBundle\Widgets\I18nl10nMetaWizard'; 92 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # Contao Multilingual Pages [i18nl10n] 3 | 4 | [![Contao 4 compatible](https://img.shields.io/badge/Contao%204-compatible-orange.svg?style=flat-square&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iRWJlbmVfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIxNHB4IiBoZWlnaHQ9IjEyLjIzcHgiIHZpZXdCb3g9IjI0LjExNiAyMS4wNDMgMTQgMTIuMjMiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMjQuMTE2IDIxLjA0MyAxNCAxMi4yMyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI%2BPHBhdGggZmlsbD0iI0ZGRkZGRiIgZD0iTTI1LjA0MiwyMS4wNDNjLTAuNTExLDAtMC45MjUsMC40MTQtMC45MjYsMC45MjR2MTAuMzgxYzAuMDAxLDAuNTExLDAuNDE2LDAuOTI1LDAuOTI2LDAuOTI1SDM3LjE5YzAuNTA5LDAsMC45MjMtMC40MTEsMC45MjYtMC45MjFWMjEuOTY4YzAtMC41MTEtMC40MTUtMC45MjUtMC45MjYtMC45MjRIMjUuMDQyeiIvPjxwYXRoIGZpbGw9IiNGNDdDMDAiIGQ9Ik0yNS4zNjEsMjguNDZjMC4zOTIsMS44MjMsMC43MTgsMy41NiwxLjg2LDQuODFoLTIuMTc5Yy0wLjUwOSwwLTAuOTIzLTAuNDExLTAuOTI2LTAuOTIxVjIxLjk2OGMwLjAwMS0wLjUxMSwwLjQxNi0wLjkyNCwwLjkyNi0wLjkyNGgxLjU3NGMtMC4zODQsMC4zNS0wLjcyMSwwLjc0OC0xLjAwMiwxLjE4NEMyNC4zNjksMjQuMTM2LDI0Ljg4MSwyNi4yMTcsMjUuMzYxLDI4LjQ2eiBNMzcuMTksMjEuMDQzaC0yLjQ3YzAuNTg0LDAuNTg1LDEuMDc4LDEuMzQyLDEuNDUsMi4yODRsLTMuNzU1LDAuNzkyYy0wLjQxMi0wLjc4OS0xLjAzNy0xLjQ0NS0yLjI2MS0xLjE4N2MtMC42NzUsMC4xNDMtMS4xMjMsMC41MjEtMS4zMjEsMC45MzZjLTAuMjQ0LDAuNTExLTAuMzY0LDEuMDg0LDAuMjE5LDMuODA4YzAuNTgzLDIuNzI0LDAuOTI3LDMuMTk4LDEuMzU4LDMuNTY2YzAuMzUxLDAuMjk4LDAuOTE2LDAuNDY0LDEuNTkxLDAuMzIxYzEuMjI1LTAuMjU4LDEuNTI2LTEuMTEsMS41OC0xLjk5N2wzLjc1NS0wLjc5M2MwLjA4OCwxLjk0Mi0wLjUxMywzLjQ0OS0xLjU3NCw0LjQ5MWgxLjQyOGMwLjUwOSwwLDAuOTIzLTAuNDExLDAuOTI2LTAuOTIxVjIxLjk2OEMzOC4xMTYsMjEuNDU2LDM3LjcwMSwyMS4wNDMsMzcuMTksMjEuMDQzeiIvPjwvc3ZnPg%3D%3D)](https://contao.org/) 5 | [![packagist](https://img.shields.io/packagist/vpre/exploreimpact/contao-i18nl10n.svg?style=flat-square)](https://packagist.org/packages/exploreimpact/contao-i18nl10n) 6 | [![packagist](https://img.shields.io/packagist/v/exploreimpact/contao-i18nl10n.svg?style=flat-square)](https://packagist.org/packages/exploreimpact/contao-i18nl10n) 7 | [![License](https://img.shields.io/badge/License-LGPL%20v3-blue.svg?style=flat-square)](http://www.gnu.org/licenses/lgpl-3.0) 8 | 9 | **Warning: This Extension is in beta status. DO NOT USE IT ON ANY PRODUCTIVE ENVIRONMENT!** 10 | 11 | **ATTENTION: I stopped the active development of this extension. This is due to several circumstances. First of all it became increasingly harder to impossible to fix existing routing related bugs. A refactoring of this extension would take an unreasonable amount of time. Several features of the extension would even require a total overwrite of the Contao routing. From my personal perspective this extension is dead - at least until someone is able and willing to invest a lot of energy to give it another try. Maybe Contao 5 will introduce ways to revive the project.** 12 | 13 | 14 | ![i18nl10n Logo](i18nl10n-logo_v2.png) 15 | 16 | 17 | ## About 18 | A module to handle localizations for Contao 4. 19 | 20 | By default Contao handles multiple languages by duplicating page trees for 21 | each language (in Contao's Site Structure). 22 | If you have many pages and languages it can become a lot of work to handle 23 | your content and to keep them in sync. Especially, when the content is 24 | similar across languages. 25 | This extension is for you! 26 | 27 | 28 | ## System requirements 29 | * [Contao 4](https://github.com/contao/core-bundle) 30 | 31 | 32 | ## Installation 33 | 34 | ### 1. Install package 35 | ```sh 36 | $ composer require exploreimpact/contao-i18nl10n 37 | 38 | # or for latest state of development: 39 | 40 | $ composer require exploreimpact/contao-i18nl10n:dev-master 41 | ``` 42 | 43 | ### 2. Update database 44 | - Run a database update via the Installtool afterwards. 45 | 46 | ### 3. Set URL settings 47 | - Open the Contao backend. 48 | - Go to "Site structure". 49 | - Edit your website's root page: 50 | - Under "DNS settings": 51 | - Enter the default language to the "Language" field. 52 | - Set the page as "language fallback". 53 | - Under "i18nl10n settings": 54 | - Add the additional languages you want to make available. 55 | 56 | ### Note: 57 | - The extension is **not** compatible with the parameter `prepend_locale: true`! 58 | 59 | 60 | ## Documentation: 61 | **Contao 4**: ... t.b.d. ... 62 | **Contao 3**: https://github.com/exploreimpact/contao-i18nl10n/wiki 63 | Note: Most configuration instructions still match for Contao 4 intallations. 64 | 65 | For changes made in the past please look into [CHANGELOG.md](CHANGELOG.md). 66 | 67 | 68 | ## Support 69 | Claudio De Facci 70 | 71 | 72 | -------------------------------------------------------------------------------- /src/Classes/I18nl10nFrontend.php: -------------------------------------------------------------------------------- 1 | 11 | * @package i18nl10n classes 12 | * @license LGPLv3 http://www.gnu.org/licenses/lgpl-3.0.html 13 | */ 14 | 15 | namespace Verstaerker\I18nl10nBundle\Classes; 16 | 17 | /** 18 | * Class I18nl10nFrontend 19 | * Common frontend functions go here 20 | * 21 | * @package Controller 22 | */ 23 | class I18nl10nFrontend extends \Controller 24 | { 25 | /** 26 | * Load database object 27 | */ 28 | protected function __construct() 29 | { 30 | // Import database instance 31 | $this->import('Database'); 32 | 33 | parent::__construct(); 34 | } 35 | 36 | /** 37 | * Replace title and pageTitle with translated equivalents 38 | * just before display them as menu. Also set visible elements. 39 | * 40 | * @param array $items 41 | * @return array 42 | */ 43 | public function l10nNavItems(array $items) 44 | { 45 | return self::i18nl10nNavItems($items, true); 46 | } 47 | 48 | /** 49 | * Replace title and pageTitle with translated equivalents 50 | * just before display them as menu. 51 | * 52 | * @param array $items The menu items on the current menu level 53 | * @param Bool [$blnUseFallback] Keep original item if no translation found 54 | * @return array $i18n_items 55 | * 56 | * @todo Refactor usage of generateFrontendUrl() 57 | */ 58 | public function i18nl10nNavItems(array $items, $blnUseFallback = false) 59 | { 60 | if (empty($items)) { 61 | return false; 62 | } 63 | 64 | /** 65 | * Info: 66 | * Be aware that Contao 3.4.0 supports 'isActive' only for start pages 67 | * with the alias 'index'. See ticket #7562 (https://github.com/contao/core/issues/7562) 68 | */ 69 | 70 | $arrLanguages = I18nl10n::getInstance()->getLanguagesByDomain(); 71 | 72 | //get item ids 73 | $item_ids = array(); 74 | 75 | foreach ($items as $row) { 76 | $item_ids[] = $row['id']; 77 | } 78 | 79 | $arrI18nItems = array(); 80 | 81 | if ($GLOBALS['TL_LANGUAGE'] !== $arrLanguages['default']) { 82 | $time = time(); 83 | $fields = 'alias,pid,title,pageTitle,description,url,language'; 84 | $sqlPublishedCondition = $blnUseFallback || BE_USER_LOGGED_IN 85 | ? '' 86 | : " AND (start='' OR start < $time) AND (stop='' OR stop > $time) AND i18nl10n_published = 1 "; 87 | 88 | $sql = " 89 | SELECT $fields 90 | FROM tl_page_i18nl10n 91 | WHERE 92 | " . $this->Database->findInSet('pid', $item_ids) . ' 93 | AND language = ? 94 | ' . $sqlPublishedCondition; 95 | 96 | $arrLocalizedPages = $this->Database 97 | ->prepare($sql) 98 | ->limit(1000) 99 | ->execute($GLOBALS['TL_LANGUAGE']) 100 | ->fetchAllassoc(); 101 | 102 | foreach ($items as $item) { 103 | $foundItem = false; 104 | 105 | foreach ($arrLocalizedPages as $row) { 106 | // Update navigation items with localization values 107 | if ($row['pid'] === $item['id']) { 108 | $foundItem = true; 109 | $alias = $row['alias'] ?: $item['alias']; 110 | 111 | $item['alias'] = $alias; 112 | $row['alias'] = $alias; 113 | $item['language'] = $row['language']; 114 | 115 | switch ($item['type']) { 116 | case 'forward': 117 | $intForwardId = $item['jumpTo'] ?: \PageModel::findFirstPublishedByPid($item['id']) 118 | ->current()->id; 119 | 120 | $arrPage = \PageModel::findWithDetails($intForwardId)->row(); 121 | 122 | $item['href'] = $this->generateFrontendUrl($arrPage); 123 | break; 124 | 125 | case 'redirect': 126 | if ($row['url']) { 127 | $item['href'] = $row['url']; 128 | } 129 | break; 130 | 131 | default: 132 | $item['href'] = $this->generateFrontendUrl($item); 133 | break; 134 | } 135 | 136 | $item['pageTitle'] = specialchars($row['pageTitle'], true); 137 | $item['title'] = specialchars($row['title'], true); 138 | $item['link'] = $item['title']; 139 | $item['description'] = str_replace( 140 | array('\n', '\r'), 141 | array(' ', ''), 142 | specialchars($row['description']) 143 | ); 144 | 145 | array_push($arrI18nItems, $item); 146 | } 147 | } 148 | 149 | if ($blnUseFallback && !$foundItem) { 150 | array_push($arrI18nItems, $item); 151 | } 152 | } 153 | } else { 154 | foreach ($items as $item) { 155 | if (!$blnUseFallback && $item['i18nl10n_published'] == '') { 156 | continue; 157 | } 158 | array_push($arrI18nItems, $item); 159 | } 160 | } 161 | 162 | return $arrI18nItems; 163 | } 164 | } 165 | --------------------------------------------------------------------------------