# *   Copyright (C) 1998-2016, 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_003.txt 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_Hant_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 de_CH.txt ee.txt\
 el.txt en.txt eo.txt es.txt es_419.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 yue.txt zh.txt zh_Hant.txt

