# *   Copyright (C) 1998-2009, International Business Machines
# *   Corporation and others.  All Rights Reserved.
GENRB_CLDR_VERSION = 1.7
# 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\
 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 bo.txt bo_CN.txt\
 bo_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 fr_SN.txt ga.txt\
 ga_IE.txt gl.txt gl_ES.txt gsw.txt gsw_CH.txt\
 gu.txt gu_IN.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 hy_AM_REVISED.txt id.txt id_ID.txt ii.txt\
 ii_CN.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_Cyrl.txt kk_Cyrl_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 ne.txt ne_IN.txt ne_NP.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_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_PT.txt ro.txt ro_MD.txt ro_RO.txt\
 ru.txt ru_RU.txt ru_UA.txt si.txt si_LK.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_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

