# *   Copyright (C) 1998-2007, International Business Machines
# *   Corporation and others.  All Rights Reserved.
GENRB_CLDR_VERSION = 1.5
# 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
#     locale:
#    _____________________________________________________
#    |  GENRB_SOURCE = ar.txt ar_AE.txt en.txt de.txt zh.txt
#
#
# Generated by LDML2ICUConverter, from LDML source files. 

# Aliases which do not have a corresponding xx.xml file (see icu-config.xml & build.xml)
GENRB_SYNTHETIC_ALIAS = en_RH.txt in.txt in_ID.txt iw.txt\
 iw_IL.txt ja_JP_TRADITIONAL.txt no.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 pa_IN.txt sh.txt sh_BA.txt\
 sh_CS.txt sh_YU.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 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 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 az.txt az_Cyrl.txt az_Cyrl_AZ.txt az_Latn.txt\
 az_Latn_AZ.txt be.txt be_BY.txt bg.txt bg_BG.txt\
 bn.txt bn_BD.txt bn_IN.txt ca.txt ca_ES.txt\
 cs.txt cs_CZ.txt cy.txt cy_GB.txt da.txt\
 da_DK.txt de.txt de_AT.txt de_BE.txt de_CH.txt\
 de_DE.txt de_LI.txt de_LU.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_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_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 fi.txt\
 fi_FI.txt fo.txt fo_FO.txt fr.txt fr_BE.txt\
 fr_CA.txt fr_CH.txt fr_FR.txt fr_LU.txt fr_MC.txt\
 ga.txt ga_IE.txt gl.txt gl_ES.txt gu.txt\
 gu_IN.txt gv.txt gv_GB.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\
 hy_AM_REVISED.txt id.txt id_ID.txt is.txt is_IS.txt\
 it.txt it_CH.txt it_IT.txt ja.txt ja_JP.txt\
 ka.txt ka_GE.txt kk.txt kk_KZ.txt kl.txt\
 kl_GL.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 lt.txt lt_LT.txt lv.txt lv_LV.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 nb.txt nb_NO.txt nl.txt nl_BE.txt\
 nl_NL.txt nn.txt nn_NO.txt om.txt om_ET.txt\
 om_KE.txt or.txt or_IN.txt pa.txt pa_Guru.txt\
 pa_Guru_IN.txt pl.txt pl_PL.txt ps.txt ps_AF.txt\
 pt.txt pt_BR.txt pt_PT.txt ro.txt ro_RO.txt\
 ru.txt ru_RU.txt ru_UA.txt sk.txt sk_SK.txt\
 sl.txt sl_SI.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 te.txt te_IN.txt th.txt th_TH.txt\
 ti.txt ti_ER.txt ti_ET.txt tr.txt tr_TR.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 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

