# *   Copyright (C) 1998-2010, International Business Machines
# *   Corporation and others.  All Rights Reserved.
GENRB_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:
#    _____________________________________________________
#    |  GENRB_SOURCE_LOCAL =   myLocale.txt ...
#
#  * To REPLACE the default list and only build with a few
#    locales:
#    _____________________________________________________
#    |  GENRB_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)
GENRB_SYNTHETIC_ALIAS = en_RH.txt in_ID.txt iw_IL.txt ja_JP_TRADITIONAL.txt\
 no_NO.txt no_NO_NY.txt th_TH_TRADITIONAL.txt


# All aliases (to not be included under 'installed'), but not including root.
GENRB_ALIAS_SOURCE = $(GENRB_SYNTHETIC_ALIAS) az_AZ.txt ha_GH.txt ha_NE.txt ha_NG.txt\
 in.txt iw.txt kk_KZ.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
GENRB_SOURCE = af.txt af_NA.txt af_ZA.txt ak.txt\
 ak_GH.txt am.txt am_ET.txt ar.txt ar_AE.txt\
 ar_BH.txt ar_DZ.txt ar_EG.txt ar_IQ.txt ar_JO.txt\
 ar_KW.txt ar_LB.txt ar_LY.txt ar_MA.txt ar_OM.txt\
 ar_QA.txt ar_SA.txt ar_SD.txt ar_SY.txt ar_TN.txt\
 ar_YE.txt as.txt as_IN.txt asa.txt asa_TZ.txt\
 az.txt az_Cyrl.txt az_Cyrl_AZ.txt az_Latn.txt az_Latn_AZ.txt\
 be.txt be_BY.txt bem.txt bem_ZM.txt bez.txt\
 bez_TZ.txt bg.txt bg_BG.txt bm.txt bm_ML.txt\
 bn.txt bn_BD.txt bn_IN.txt bo.txt bo_CN.txt\
 bo_IN.txt ca.txt ca_ES.txt cgg.txt cgg_UG.txt\
 chr.txt chr_US.txt cs.txt cs_CZ.txt cy.txt\
 cy_GB.txt da.txt da_DK.txt dav.txt dav_KE.txt\
 de.txt de_AT.txt de_BE.txt de_CH.txt de_DE.txt\
 de_LI.txt de_LU.txt ebu.txt ebu_KE.txt ee.txt\
 ee_GH.txt ee_TG.txt el.txt el_CY.txt el_GR.txt\
 en.txt en_AU.txt en_BE.txt en_BW.txt en_BZ.txt\
 en_CA.txt en_GB.txt en_HK.txt en_IE.txt en_IN.txt\
 en_JM.txt en_MH.txt en_MT.txt en_MU.txt en_NA.txt\
 en_NZ.txt en_PH.txt en_PK.txt en_SG.txt en_TT.txt\
 en_US.txt en_US_POSIX.txt en_VI.txt en_ZA.txt en_ZW.txt\
 eo.txt es.txt es_AR.txt es_BO.txt es_CL.txt\
 es_CO.txt es_CR.txt es_DO.txt es_EC.txt es_ES.txt\
 es_GQ.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 et_EE.txt\
 eu.txt eu_ES.txt fa.txt fa_AF.txt fa_IR.txt\
 ff.txt ff_SN.txt fi.txt fi_FI.txt fil.txt\
 fil_PH.txt fo.txt fo_FO.txt fr.txt fr_BE.txt\
 fr_BL.txt fr_CA.txt fr_CF.txt fr_CH.txt fr_CI.txt\
 fr_CM.txt fr_FR.txt fr_GN.txt fr_GP.txt fr_LU.txt\
 fr_MC.txt fr_MF.txt fr_MG.txt fr_ML.txt fr_MQ.txt\
 fr_NE.txt fr_RE.txt fr_SN.txt ga.txt ga_IE.txt\
 gl.txt gl_ES.txt gsw.txt gsw_CH.txt gu.txt\
 gu_IN.txt guz.txt guz_KE.txt gv.txt gv_GB.txt\
 ha.txt ha_Latn.txt ha_Latn_GH.txt ha_Latn_NE.txt ha_Latn_NG.txt\
 haw.txt haw_US.txt he.txt he_IL.txt hi.txt\
 hi_IN.txt hr.txt hr_HR.txt hu.txt hu_HU.txt\
 hy.txt hy_AM.txt id.txt id_ID.txt ig.txt\
 ig_NG.txt ii.txt ii_CN.txt is.txt is_IS.txt\
 it.txt it_CH.txt it_IT.txt ja.txt ja_JP.txt\
 jmc.txt jmc_TZ.txt ka.txt ka_GE.txt kab.txt\
 kab_DZ.txt kam.txt kam_KE.txt kde.txt kde_TZ.txt\
 kea.txt kea_CV.txt khq.txt khq_ML.txt ki.txt\
 ki_KE.txt kk.txt kk_Cyrl.txt kk_Cyrl_KZ.txt kl.txt\
 kl_GL.txt kln.txt kln_KE.txt km.txt km_KH.txt\
 kn.txt kn_IN.txt ko.txt ko_KR.txt kok.txt\
 kok_IN.txt kw.txt kw_GB.txt lag.txt lag_TZ.txt\
 lg.txt lg_UG.txt lt.txt lt_LT.txt luo.txt\
 luo_KE.txt luy.txt luy_KE.txt lv.txt lv_LV.txt\
 mas.txt mas_KE.txt mas_TZ.txt mer.txt mer_KE.txt\
 mfe.txt mfe_MU.txt mg.txt mg_MG.txt mk.txt\
 mk_MK.txt ml.txt ml_IN.txt mr.txt mr_IN.txt\
 ms.txt ms_BN.txt ms_MY.txt mt.txt mt_MT.txt\
 naq.txt naq_NA.txt nb.txt nb_NO.txt nd.txt\
 nd_ZW.txt ne.txt ne_IN.txt ne_NP.txt nl.txt\
 nl_BE.txt nl_NL.txt nn.txt nn_NO.txt nyn.txt\
 nyn_UG.txt om.txt om_ET.txt om_KE.txt or.txt\
 or_IN.txt pa.txt pa_Arab.txt pa_Arab_PK.txt pa_Guru.txt\
 pa_Guru_IN.txt pl.txt pl_PL.txt ps.txt ps_AF.txt\
 pt.txt pt_BR.txt pt_GW.txt pt_MZ.txt pt_PT.txt\
 rm.txt rm_CH.txt ro.txt ro_MD.txt ro_RO.txt\
 rof.txt rof_TZ.txt ru.txt ru_MD.txt ru_RU.txt\
 ru_UA.txt rw.txt rw_RW.txt rwk.txt rwk_TZ.txt\
 saq.txt saq_KE.txt seh.txt seh_MZ.txt ses.txt\
 ses_ML.txt sg.txt sg_CF.txt shi.txt shi_Latn.txt\
 shi_Latn_MA.txt shi_Tfng.txt shi_Tfng_MA.txt si.txt si_LK.txt\
 sk.txt sk_SK.txt sl.txt sl_SI.txt sn.txt\
 sn_ZW.txt so.txt so_DJ.txt so_ET.txt so_KE.txt\
 so_SO.txt sq.txt sq_AL.txt sr.txt sr_Cyrl.txt\
 sr_Cyrl_BA.txt sr_Cyrl_ME.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 sv_SE.txt\
 sw.txt sw_KE.txt sw_TZ.txt ta.txt ta_IN.txt\
 ta_LK.txt te.txt te_IN.txt teo.txt teo_KE.txt\
 teo_UG.txt th.txt th_TH.txt ti.txt ti_ER.txt\
 ti_ET.txt to.txt to_TO.txt tr.txt tr_TR.txt\
 tzm.txt tzm_Latn.txt tzm_Latn_MA.txt uk.txt uk_UA.txt\
 ur.txt ur_IN.txt ur_PK.txt uz.txt uz_Arab.txt\
 uz_Arab_AF.txt uz_Cyrl.txt uz_Cyrl_UZ.txt uz_Latn.txt uz_Latn_UZ.txt\
 vi.txt vi_VN.txt vun.txt vun_TZ.txt xog.txt\
 xog_UG.txt yo.txt yo_NG.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 zu_ZA.txt

