# *   Copyright (C) 1998-2014, International Business Machines
# *   Corporation and others.  All Rights Reserved.
LANG_CLDR_VERSION = %version%
# A list of txt's to build
# Note:
#
#   If you are thinking of modifying this file, READ THIS.
#
# Instead of changing this file [unless you want to check it back in],
# you should consider creating a '%local%' file in this same directory.
# Then, you can have your local changes remain even if you upgrade or
# reconfigure ICU.
#
# Example '%local%' files:
#
#  * To add an additional locale to the list:
#    _____________________________________________________
#    |  LANG_SOURCE_LOCAL =   myLocale.txt ...
#
#  * To REPLACE the default list and only build with a few
#    locales:
#    _____________________________________________________
#    |  LANG_SOURCE = ar.txt ar_AE.txt en.txt de.txt zh.txt
#
#
# Generated by LDML2ICUConverter, from LDML source files.

# Aliases without a corresponding xx.xml file (see icu-config.xml & build.xml)
LANG_SYNTHETIC_ALIAS = az_AZ.txt az_Latn_AZ.txt bs_BA.txt bs_Latn_BA.txt\
 en_NH.txt en_RH.txt fil_PH.txt ha_GH.txt ha_Latn_GH.txt\
 ha_Latn_NE.txt ha_Latn_NG.txt ha_NE.txt ha_NG.txt he_IL.txt\
 id_ID.txt in.txt in_ID.txt iw.txt iw_IL.txt\
 ja_JP.txt ja_JP_TRADITIONAL.txt kk_Cyrl_KZ.txt kk_KZ.txt ks_Arab_IN.txt\
 ks_IN.txt ky_Cyrl_KG.txt ky_KG.txt mn_Cyrl_MN.txt mn_MN.txt\
 mo.txt ms_BN.txt ms_Latn_BN.txt ms_Latn_MY.txt ms_Latn_SG.txt\
 ms_MY.txt ms_SG.txt nb_NO.txt nn_NO.txt no.txt\
 no_NO.txt no_NO_NY.txt pa_Arab_PK.txt pa_Guru_IN.txt pa_IN.txt\
 pa_PK.txt ro_MD.txt sh.txt sh_BA.txt sh_CS.txt\
 sh_YU.txt shi_MA.txt shi_Tfng_MA.txt sr_BA.txt sr_CS.txt\
 sr_Cyrl_BA.txt sr_Cyrl_CS.txt sr_Cyrl_RS.txt sr_Cyrl_XK.txt sr_Cyrl_YU.txt\
 sr_Latn_BA.txt sr_Latn_CS.txt sr_Latn_ME.txt sr_Latn_RS.txt sr_Latn_YU.txt\
 sr_ME.txt sr_RS.txt sr_XK.txt sr_YU.txt th_TH.txt\
 th_TH_TRADITIONAL.txt tl.txt tl_PH.txt tzm_Latn_MA.txt tzm_MA.txt\
 ug_Arab_CN.txt ug_CN.txt uz_AF.txt uz_Arab_AF.txt uz_Latn_UZ.txt\
 uz_UZ.txt vai_LR.txt vai_Vaii_LR.txt zh_CN.txt zh_HK.txt\
 zh_Hans_CN.txt zh_Hant_TW.txt zh_MO.txt zh_SG.txt zh_TW.txt


# All aliases (to not be included under 'installed'), but not including root.
LANG_ALIAS_SOURCE = $(LANG_SYNTHETIC_ALIAS)


# Ordinary resources
LANG_SOURCE = af.txt agq.txt ak.txt am.txt\
 ar.txt ar_AE.txt ar_EG.txt ar_LB.txt as.txt\
 asa.txt az.txt az_Cyrl.txt az_Latn.txt bas.txt\
 be.txt bem.txt bez.txt bg.txt bm.txt\
 bm_Latn.txt bn.txt bn_IN.txt bo.txt br.txt\
 brx.txt bs.txt bs_Cyrl.txt bs_Latn.txt ca.txt\
 cgg.txt chr.txt cs.txt cy.txt da.txt\
 dav.txt de.txt de_CH.txt dje.txt dsb.txt\
 dua.txt dyo.txt dz.txt ebu.txt ee.txt\
 el.txt en.txt en_150.txt en_AG.txt en_AI.txt\
 en_AU.txt en_BB.txt en_BE.txt en_BM.txt en_BS.txt\
 en_BW.txt en_BZ.txt en_CC.txt en_CK.txt en_CM.txt\
 en_CX.txt en_DG.txt en_DM.txt en_ER.txt en_FJ.txt\
 en_FK.txt en_FM.txt en_GB.txt en_GD.txt en_GG.txt\
 en_GH.txt en_GI.txt en_GM.txt en_GY.txt en_HK.txt\
 en_IE.txt en_IM.txt en_IN.txt en_IO.txt en_JE.txt\
 en_JM.txt en_KE.txt en_KI.txt en_KN.txt en_KY.txt\
 en_LC.txt en_LR.txt en_LS.txt en_MG.txt en_MO.txt\
 en_MS.txt en_MT.txt en_MU.txt en_MW.txt en_MY.txt\
 en_NA.txt en_NF.txt en_NG.txt en_NR.txt en_NU.txt\
 en_NZ.txt en_PG.txt en_PH.txt en_PK.txt en_PN.txt\
 en_PW.txt en_RW.txt en_SB.txt en_SC.txt en_SD.txt\
 en_SG.txt en_SH.txt en_SL.txt en_SS.txt en_SX.txt\
 en_SZ.txt en_TC.txt en_TK.txt en_TO.txt en_TT.txt\
 en_TV.txt en_TZ.txt en_UG.txt en_VC.txt en_VG.txt\
 en_VU.txt en_WS.txt en_ZA.txt en_ZM.txt en_ZW.txt\
 eo.txt es.txt es_419.txt es_AR.txt es_BO.txt\
 es_CL.txt es_CO.txt es_CR.txt es_CU.txt es_DO.txt\
 es_EC.txt es_GT.txt es_HN.txt es_MX.txt es_NI.txt\
 es_PA.txt es_PE.txt es_PR.txt es_PY.txt es_SV.txt\
 es_US.txt es_UY.txt es_VE.txt et.txt eu.txt\
 ewo.txt fa.txt fa_AF.txt ff.txt fi.txt\
 fil.txt fo.txt fr.txt fr_CA.txt fur.txt\
 fy.txt ga.txt gd.txt gl.txt gsw.txt\
 gu.txt guz.txt gv.txt ha.txt ha_Latn.txt\
 haw.txt he.txt hi.txt hr.txt hsb.txt\
 hu.txt hy.txt id.txt ig.txt ii.txt\
 is.txt it.txt ja.txt jgo.txt jmc.txt\
 ka.txt kab.txt kam.txt kde.txt kea.txt\
 khq.txt ki.txt kk.txt kk_Cyrl.txt kkj.txt\
 kl.txt kln.txt km.txt kn.txt ko.txt\
 kok.txt ks.txt ks_Arab.txt ksb.txt ksf.txt\
 ksh.txt kw.txt ky.txt ky_Cyrl.txt lag.txt\
 lb.txt lg.txt lkt.txt ln.txt lo.txt\
 lt.txt lu.txt luo.txt luy.txt lv.txt\
 mas.txt mer.txt mfe.txt mg.txt mgh.txt\
 mgo.txt mk.txt ml.txt mn.txt mn_Cyrl.txt\
 mr.txt ms.txt ms_Latn.txt mt.txt mua.txt\
 my.txt naq.txt nb.txt nd.txt ne.txt\
 ne_IN.txt nl.txt nl_BE.txt nmg.txt nn.txt\
 nnh.txt nus.txt nyn.txt om.txt or.txt\
 os.txt pa.txt pa_Arab.txt pa_Guru.txt pl.txt\
 ps.txt pt.txt pt_AO.txt pt_CV.txt pt_GW.txt\
 pt_MO.txt pt_MZ.txt pt_PT.txt pt_ST.txt pt_TL.txt\
 qu.txt rm.txt rn.txt ro.txt rof.txt\
 ru.txt ru_UA.txt rw.txt rwk.txt sah.txt\
 saq.txt sbp.txt se.txt se_FI.txt seh.txt\
 ses.txt sg.txt shi.txt shi_Latn.txt shi_Tfng.txt\
 si.txt sk.txt sl.txt smn.txt sn.txt\
 so.txt sq.txt sr.txt sr_Cyrl.txt sr_Latn.txt\
 sv.txt sv_FI.txt sw.txt swc.txt ta.txt\
 te.txt teo.txt th.txt ti.txt to.txt\
 tr.txt twq.txt tzm.txt tzm_Latn.txt ug.txt\
 ug_Arab.txt uk.txt ur.txt ur_IN.txt uz.txt\
 uz_Arab.txt uz_Cyrl.txt uz_Latn.txt vai.txt vai_Latn.txt\
 vai_Vaii.txt vi.txt vun.txt wae.txt xog.txt\
 yav.txt yi.txt yo.txt yo_BJ.txt zgh.txt\
 zh.txt zh_Hans.txt zh_Hans_HK.txt zh_Hans_MO.txt zh_Hans_SG.txt\
 zh_Hant.txt zh_Hant_HK.txt zh_Hant_MO.txt zu.txt

