# *   Copyright (C) 1998-2006, International Business Machines
# *   Corporation and others.  All Rights Reserved.
# 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 sh.txt sh_CS.txt sh_YU.txt\
 sr_CS.txt sr_Cyrl_CS.txt sr_Latn_CS.txt sr_Cyrl_YU.txt sr_Latn_YU.txt sr_YU.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_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_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_LU.txt\
 el.txt el_GR.txt en.txt en_AU.txt en_BE.txt\
 en_BW.txt en_CA.txt en_GB.txt en_HK.txt en_IE.txt\
 en_IN.txt en_MT.txt en_NZ.txt en_PH.txt en_PK.txt\
 en_SG.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\
 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\
 kk.txt kk_KZ.txt kl.txt kl_GL.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_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_RS.txt sr_Latn.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_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

