# *   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 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
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

