# *   Copyright (C) 1998-2010, International Business Machines
# *   Corporation and others.  All Rights Reserved.
CURR_CLDR_VERSION = 1.8.1
# 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 'reslocal.mk' file in this same directory.
# Then, you can have your local changes remain even if you upgrade or
# reconfigure ICU.
#
# Example 'reslocal.mk' files:
#
#  * To add an additional locale to the list:
#    _____________________________________________________
#    |  CURR_SOURCE_LOCAL =   myLocale.txt ...
#
#  * To REPLACE the default list and only build with a few
#    locales:
#    _____________________________________________________
#    |  CURR_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)
CURR_SYNTHETIC_ALIAS = en_RH.txt en_ZW.txt he_IL.txt id_ID.txt\
 in_ID.txt iw_IL.txt ja_JP.txt ja_JP_TRADITIONAL.txt nb_NO.txt\
 nn_NO.txt no_NO.txt no_NO_NY.txt th_TH.txt th_TH_TRADITIONAL.txt


# All aliases (to not be included under 'installed'), but not including root.
CURR_ALIAS_SOURCE = $(CURR_SYNTHETIC_ALIAS) az_AZ.txt ha_GH.txt ha_NE.txt ha_NG.txt\
 in.txt iw.txt kk_KZ.txt mo.txt no.txt\
 pa_IN.txt pa_PK.txt sh.txt sh_BA.txt sh_CS.txt\
 sh_YU.txt shi_MA.txt sr_BA.txt sr_CS.txt sr_Cyrl_CS.txt\
 sr_Cyrl_YU.txt sr_Latn_CS.txt sr_Latn_YU.txt sr_ME.txt sr_RS.txt\
 sr_YU.txt tl.txt tzm_MA.txt uz_AF.txt uz_UZ.txt\
 zh_CN.txt zh_HK.txt zh_MO.txt zh_SG.txt zh_TW.txt


# Ordinary resources
CURR_SOURCE = af.txt ak.txt am.txt ar.txt\
 as.txt asa.txt az.txt az_Cyrl.txt az_Latn.txt\
 az_Latn_AZ.txt be.txt bem.txt bez.txt bg.txt\
 bm.txt bn.txt bo.txt ca.txt cgg.txt\
 chr.txt cs.txt cy.txt da.txt dav.txt\
 de.txt de_BE.txt de_LU.txt ebu.txt ee.txt\
 el.txt en.txt en_AU.txt en_BE.txt en_BW.txt\
 en_BZ.txt en_CA.txt en_HK.txt en_JM.txt en_MT.txt\
 en_NA.txt en_NZ.txt en_PH.txt en_PK.txt en_SG.txt\
 en_TT.txt eo.txt es.txt es_AR.txt es_CL.txt\
 es_CO.txt es_EC.txt es_GT.txt es_HN.txt es_MX.txt\
 es_PR.txt es_US.txt es_UY.txt et.txt eu.txt\
 fa.txt fa_AF.txt ff.txt fi.txt fil.txt\
 fo.txt fr.txt fr_CA.txt fr_LU.txt ga.txt\
 gl.txt gsw.txt gu.txt guz.txt gv.txt\
 ha.txt ha_Latn.txt ha_Latn_GH.txt ha_Latn_NE.txt ha_Latn_NG.txt\
 haw.txt he.txt hi.txt hr.txt hu.txt\
 hy.txt id.txt ig.txt ii.txt is.txt\
 it.txt ja.txt jmc.txt ka.txt kab.txt\
 kam.txt kde.txt kea.txt khq.txt ki.txt\
 kk.txt kk_Cyrl.txt kk_Cyrl_KZ.txt kl.txt kln.txt\
 km.txt kn.txt ko.txt kok.txt kw.txt\
 lag.txt lg.txt lt.txt luo.txt luy.txt\
 lv.txt mas.txt mer.txt mfe.txt mg.txt\
 mk.txt ml.txt mr.txt ms.txt ms_BN.txt\
 mt.txt naq.txt nb.txt nd.txt ne.txt\
 ne_IN.txt nl.txt nn.txt nyn.txt om.txt\
 or.txt pa.txt pa_Arab.txt pa_Arab_PK.txt pa_Guru.txt\
 pa_Guru_IN.txt pl.txt ps.txt pt.txt pt_PT.txt\
 rm.txt ro.txt ro_MD.txt rof.txt ru.txt\
 rw.txt rwk.txt saq.txt seh.txt ses.txt\
 sg.txt shi.txt shi_Latn.txt shi_Latn_MA.txt shi_Tfng.txt\
 si.txt sk.txt sl.txt sn.txt so.txt\
 sq.txt sr.txt sr_Cyrl.txt sr_Cyrl_BA.txt sr_Cyrl_RS.txt\
 sr_Latn.txt sr_Latn_BA.txt sr_Latn_ME.txt sr_Latn_RS.txt sv.txt\
 sw.txt ta.txt te.txt teo.txt th.txt\
 ti.txt to.txt tr.txt tzm.txt tzm_Latn.txt\
 tzm_Latn_MA.txt uk.txt ur.txt uz.txt uz_Arab.txt\
 uz_Arab_AF.txt uz_Cyrl.txt uz_Cyrl_UZ.txt uz_Latn.txt vi.txt\
 vun.txt xog.txt yo.txt zh.txt zh_Hans.txt\
 zh_Hans_CN.txt zh_Hans_HK.txt zh_Hans_SG.txt zh_Hant.txt zh_Hant_HK.txt\
 zh_Hant_MO.txt zh_Hant_TW.txt zu.txt

