# *   Copyright (C) 1998-2015, International Business Machines
# *   Corporation and others.  All Rights Reserved.
COLLATION_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:
#    _____________________________________________________
#    |  COLLATION_SOURCE_LOCAL =   myLocale.txt ...
#
#  * To REPLACE the default list and only build with a few
#    locales:
#    _____________________________________________________
#    |  COLLATION_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)
COLLATION_SYNTHETIC_ALIAS = de_.txt de__PHONEBOOK.txt es_.txt es__TRADITIONAL.txt\
 he_IL.txt id_ID.txt in.txt in_ID.txt iw.txt\
 iw_IL.txt mo.txt nb_NO.txt no.txt no_NO.txt\
 pa_Guru.txt pa_Guru_IN.txt pa_IN.txt ro_MD.txt sh.txt\
 sh_BA.txt sh_CS.txt sh_YU.txt sr_BA.txt sr_Cyrl.txt\
 sr_Cyrl_BA.txt sr_Cyrl_ME.txt sr_Cyrl_RS.txt sr_Latn_BA.txt sr_Latn_RS.txt\
 sr_ME.txt sr_RS.txt ug_Arab.txt ug_Arab_CN.txt ug_CN.txt\
 zh_CN.txt zh_HK.txt zh_Hans.txt zh_Hans_CN.txt zh_Hans_SG.txt\
 zh_Hant_HK.txt zh_Hant_MO.txt zh_Hant_TW.txt zh_MO.txt zh_SG.txt\
 zh_TW.txt


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


# Empty locales, used for validSubLocale fallback.
COLLATION_EMPTY_SOURCE =


# Ordinary resources
COLLATION_SOURCE = $(COLLATION_EMPTY_SOURCE) af.txt ar.txt as.txt\
 az.txt be.txt bg.txt bn.txt bs.txt\
 bs_Cyrl.txt ca.txt chr.txt cs.txt cy.txt\
 da.txt de.txt de_AT.txt dsb.txt dz.txt\
 ee.txt el.txt en.txt en_US.txt en_US_POSIX.txt\
 eo.txt es.txt et.txt fa.txt fa_AF.txt\
 fi.txt fil.txt fo.txt fr.txt fr_CA.txt\
 ga.txt gl.txt gu.txt ha.txt haw.txt\
 he.txt hi.txt hr.txt hsb.txt hu.txt\
 hy.txt id.txt ig.txt is.txt it.txt\
 ja.txt ka.txt kk.txt kl.txt km.txt\
 kn.txt ko.txt kok.txt ky.txt lb.txt\
 lkt.txt ln.txt lt.txt lv.txt mk.txt\
 ml.txt mr.txt ms.txt mt.txt my.txt\
 nb.txt nl.txt nn.txt om.txt or.txt\
 pa.txt pl.txt ps.txt pt.txt ro.txt\
 ru.txt se.txt si.txt sk.txt sl.txt\
 smn.txt sq.txt sr.txt sr_Latn.txt sv.txt\
 sw.txt ta.txt te.txt th.txt to.txt\
 tr.txt ug.txt uk.txt ur.txt vi.txt\
 wae.txt yi.txt yo.txt zh.txt zh_Hant.txt\
 zu.txt

