# *   Copyright (C) 1998-2015, International Business Machines
# *   Corporation and others.  All Rights Reserved.
RBNF_CLDR_VERSION = %version%
# 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 '%local%' file in this same directory.
# Then, you can have your local changes remain even if you upgrade or
# reconfigure ICU.
#
# Example '%local%' files:
#
#  * To add an additional locale to the list:
#    _____________________________________________________
#    |  RBNF_SOURCE_LOCAL =   myLocale.txt ...
#
#  * To REPLACE the default list and only build with a few
#    locales:
#    _____________________________________________________
#    |  RBNF_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)
RBNF_SYNTHETIC_ALIAS = es_DO.txt es_GT.txt es_HN.txt es_MX.txt\
 es_NI.txt es_PA.txt es_PR.txt es_SV.txt es_US.txt\
 in.txt iw.txt no.txt sh.txt zh_HK.txt\
 zh_MO.txt zh_TW.txt


# All aliases (to not be included under 'installed'), but not including root.
RBNF_ALIAS_SOURCE = $(RBNF_SYNTHETIC_ALIAS)


# Ordinary resources
RBNF_SOURCE = af.txt am.txt ar.txt az.txt\
 be.txt bg.txt bs.txt ca.txt cs.txt\
 cy.txt da.txt de.txt ee.txt el.txt\
 en.txt eo.txt es.txt es_003.txt et.txt\
 fa.txt fa_AF.txt fi.txt fil.txt fo.txt\
 fr.txt fr_BE.txt fr_CH.txt ga.txt he.txt\
 hi.txt hr.txt hu.txt hy.txt id.txt\
 is.txt it.txt ja.txt ka.txt kl.txt\
 km.txt ko.txt ky.txt lo.txt lt.txt\
 lv.txt mk.txt ms.txt mt.txt my.txt\
 nb.txt nl.txt nn.txt pl.txt pt.txt\
 pt_PT.txt ro.txt ru.txt se.txt sk.txt\
 sl.txt sq.txt sr.txt sr_Latn.txt sv.txt\
 ta.txt th.txt tr.txt uk.txt vi.txt\
 zh.txt zh_Hant.txt zh_Hant_HK.txt

