# *   Copyright (C) 1998-2012, International Business Machines
# *   Corporation and others.  All Rights Reserved.
REGION_CLDR_VERSION = 22.0
# 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:
#    _____________________________________________________
#    |  REGION_SOURCE_LOCAL =   myLocale.txt ...
#
#  * To REPLACE the default list and only build with a few
#    locales:
#    _____________________________________________________
#    |  REGION_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)
REGION_SYNTHETIC_ALIAS = az_AZ.txt az_Latn_AZ.txt bs_BA.txt bs_Latn_BA.txt\
 en_NH.txt en_RH.txt en_VU.txt en_ZW.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 mo.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_Latn_MA.txt shi_MA.txt\
 sr_BA.txt sr_CS.txt sr_Cyrl_BA.txt sr_Cyrl_CS.txt sr_Cyrl_RS.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_YU.txt th_TH.txt\
 th_TH_TRADITIONAL.txt tl.txt tl_PH.txt tzm_Latn_MA.txt tzm_MA.txt\
 uz_AF.txt uz_Arab_AF.txt uz_Cyrl_UZ.txt uz_UZ.txt vai_LR.txt\
 vai_Vaii_LR.txt zh_CN.txt zh_HK.txt zh_Hans_CN.txt zh_Hant_MO.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.
REGION_ALIAS_SOURCE = $(REGION_SYNTHETIC_ALIAS)


# Ordinary resources
REGION_SOURCE = af.txt agq.txt ak.txt am.txt\
 ar.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 bn.txt bn_IN.txt bo.txt\
 bo_IN.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 dua.txt dyo.txt dz.txt ebu.txt\
 ee.txt el.txt en.txt en_GB.txt eo.txt\
 es.txt es_CL.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 ga.txt gl.txt\
 gsw.txt gu.txt guz.txt gv.txt ha.txt\
 ha_Latn.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 jgo.txt jmc.txt\
 ka.txt kab.txt kam.txt kde.txt kea.txt\
 khq.txt ki.txt kk.txt kk_Cyrl.txt kl.txt\
 kln.txt km.txt kn.txt ko.txt kok.txt\
 ks.txt ks_Arab.txt ksb.txt ksf.txt kw.txt\
 lag.txt lg.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 mr.txt ms.txt mt.txt\
 mua.txt my.txt naq.txt nb.txt nd.txt\
 ne.txt nl.txt nl_BE.txt nmg.txt nn.txt\
 nus.txt nyn.txt om.txt or.txt pa.txt\
 pa_Arab.txt pa_Guru.txt pl.txt ps.txt pt.txt\
 pt_PT.txt rm.txt rn.txt ro.txt rof.txt\
 ru.txt rw.txt rwk.txt saq.txt sbp.txt\
 seh.txt ses.txt sg.txt shi.txt shi_Latn.txt\
 shi_Tfng.txt si.txt sk.txt sl.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 uk.txt\
 ur.txt uz.txt uz_Arab.txt uz_Cyrl.txt uz_Latn.txt\
 vai.txt vai_Latn.txt vai_Vaii.txt vi.txt vun.txt\
 xog.txt yav.txt yo.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\
 zu.txt

