# *   Copyright (C) 1998-2011, International Business Machines
# *   Corporation and others.  All Rights Reserved.
REGION_CLDR_VERSION = 2.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 = 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 vai_LR.txt zh_CN.txt zh_HK.txt zh_MO.txt\
 zh_SG.txt zh_TW.txt


# 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 az_Latn_AZ.txt bas.txt be.txt bem.txt\
 bez.txt bg.txt bm.txt bn.txt bo.txt\
 br.txt brx.txt bs.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\
 ebu.txt ee.txt el.txt en.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\
 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 ksb.txt ksf.txt\
 kw.txt lag.txt lg.txt ln.txt lt.txt\
 lu.txt luo.txt luy.txt lv.txt mas.txt\
 mer.txt mfe.txt mg.txt mgh.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_Arab_PK.txt pa_Guru.txt pa_Guru_IN.txt pl.txt ps.txt\
 pt.txt pt_PT.txt rm.txt rn.txt ro.txt\
 ro_MD.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_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\
 swc.txt ta.txt te.txt teo.txt th.txt\
 ti.txt to.txt tr.txt twq.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\
 vai.txt vai_Latn.txt vai_Vaii.txt vai_Vaii_LR.txt vi.txt\
 vun.txt xog.txt yav.txt yo.txt zh.txt\
 zh_Hans.txt zh_Hans_CN.txt zh_Hans_HK.txt zh_Hans_MO.txt zh_Hans_SG.txt\
 zh_Hant.txt zh_Hant_HK.txt zh_Hant_MO.txt zh_Hant_TW.txt zu.txt

