# *   Copyright (C) 1998-2010, International Business Machines
# *   Corporation and others.  All Rights Reserved.
REGION_CLDR_VERSION = 1.9
# 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 = 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.
REGION_ALIAS_SOURCE = $(REGION_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 tl_PH.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
REGION_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 bs.txt ca.txt\
 cgg.txt chr.txt cs.txt cy.txt da.txt\
 dav.txt de.txt de_CH.txt ebu.txt ee.txt\
 el.txt en.txt eo.txt es.txt es_CL.txt\
 et.txt eu.txt fa.txt fa_AF.txt ff.txt\
 fi.txt fil.txt fil_PH.txt fo.txt fr.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\
 mt.txt my.txt naq.txt nb.txt nd.txt\
 ne.txt nl.txt nl_BE.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 sv_FI.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_SG.txt zh_Hant.txt\
 zh_Hant_HK.txt zh_Hant_MO.txt zh_Hant_TW.txt zu.txt

