# *   Copyright (C) 1998-2008, International Business Machines
# *   Corporation and others.  All Rights Reserved.
COLLATION_CLDR_VERSION = 1.6
# 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 'collocal.mk' file in this same directory.
# Then, you can have your local changes remain even if you upgrade or
# reconfigure ICU.
#
# Example 'collocal.mk' 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
#     locale:
#    _____________________________________________________
#    |  COLLATION_SOURCE = ar.txt ar_AE.txt en.txt de.txt zh.txt
#
#
# Generated by LDML2ICUConverter, from LDML source files. 

# Aliases which do not have a corresponding xx.xml file (see icu-config.xml & build.xml)
COLLATION_SYNTHETIC_ALIAS = de_.txt de__PHONEBOOK.txt es_.txt es__TRADITIONAL.txt\
 hi_.txt hi__DIRECT.txt in.txt in_ID.txt iw.txt\
 iw_IL.txt no.txt no_NO.txt sh.txt sh_BA.txt\
 sh_YU.txt sr_BA.txt sr_ME.txt sr_RS.txt zh_.txt\
 zh_CN.txt zh_HK.txt zh_MO.txt zh_SG.txt zh_TW.txt\
 zh_TW_STROKE.txt zh__PINYIN.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 = 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_IN.txt be_BY.txt\
 bg_BG.txt ca_ES.txt cs_CZ.txt da_DK.txt de_AT.txt\
 de_BE.txt de_CH.txt de_DE.txt de_LU.txt el_GR.txt\
 en_AU.txt en_BW.txt en_CA.txt en_GB.txt en_HK.txt\
 en_IE.txt en_IN.txt en_MT.txt en_NZ.txt en_PH.txt\
 en_SG.txt en_US.txt en_US_POSIX.txt en_VI.txt en_ZA.txt\
 en_ZW.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_EE.txt fa_IR.txt fi_FI.txt fo_FO.txt\
 fr_BE.txt fr_CA.txt fr_CH.txt fr_FR.txt fr_LU.txt\
 ga.txt ga_IE.txt gu_IN.txt he_IL.txt hi_IN.txt\
 hr_HR.txt hu_HU.txt id.txt id_ID.txt is_IS.txt\
 it_CH.txt it_IT.txt ja_JP.txt kk_KZ.txt kl_GL.txt\
 kn_IN.txt ko_KR.txt lt_LT.txt lv_LV.txt mk_MK.txt\
 mr_IN.txt ms.txt ms_BN.txt ms_MY.txt mt_MT.txt\
 nb_NO.txt nl.txt nl_BE.txt nl_NL.txt nn_NO.txt\
 om_ET.txt om_KE.txt pa_Arab.txt pa_Arab_PK.txt pa_Guru.txt\
 pa_Guru_IN.txt pl_PL.txt ps_AF.txt pt.txt pt_BR.txt\
 pt_PT.txt ro_RO.txt ru_RU.txt ru_UA.txt sk_SK.txt\
 sl_SI.txt sq_AL.txt sr_Cyrl.txt sr_Cyrl_BA.txt sr_Cyrl_ME.txt\
 sr_Cyrl_RS.txt sr_Latn_BA.txt sr_Latn_ME.txt sr_Latn_RS.txt sv_FI.txt\
 sv_SE.txt ta_IN.txt te_IN.txt th_TH.txt tr_TR.txt\
 uk_UA.txt ur_IN.txt ur_PK.txt vi_VN.txt zh_Hans.txt\
 zh_Hans_CN.txt zh_Hans_SG.txt zh_Hant_HK.txt zh_Hant_MO.txt zh_Hant_TW.txt


# Ordinary resources
COLLATION_SOURCE = $(COLLATION_EMPTY_SOURCE) ar.txt as.txt be.txt bg.txt\
 bn.txt bn_IN.txt ca.txt cs.txt cy.txt\
 da.txt de.txt el.txt en.txt en_BE.txt\
 eo.txt es.txt et.txt fa.txt fa_AF.txt\
 fi.txt fo.txt fr.txt gu.txt haw.txt\
 he.txt hi.txt hr.txt hu.txt is.txt\
 it.txt ja.txt kk.txt kl.txt km.txt\
 kn.txt ko.txt kok.txt lt.txt lv.txt\
 mk.txt ml.txt mr.txt mt.txt nb.txt\
 nn.txt om.txt or.txt pa.txt pl.txt\
 ps.txt ro.txt ru.txt sk.txt sl.txt\
 sq.txt sr.txt sr_Latn.txt sv.txt ta.txt\
 te.txt th.txt tr.txt uk.txt ur.txt\
 vi.txt zh.txt zh_Hant.txt

