# *   Copyright (C) 1998-2014, 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 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

