# *   Copyright (C) 1998-2010, International Business Machines
# *   Corporation and others.  All Rights Reserved.
LANG_CLDR_VERSION = 1.9
# 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 'reslocal.mk' file in this same directory.
# Then, you can have your local changes remain even if you upgrade or
# reconfigure ICU.
#
# Example 'reslocal.mk' files:
#
#  * To add an additional locale to the list:
#    _____________________________________________________
#    |  LANG_SOURCE_LOCAL =   myLocale.txt ...
#
#  * To REPLACE the default list and only build with a few
#    locales:
#    _____________________________________________________
#    |  LANG_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)
LANG_SYNTHETIC_ALIAS = en_RH.txt en_ZW.txt he_IL.txt id_ID.txt\
 in_ID.txt iw_IL.txt ja_JP.txt ja_JP_TRADITIONAL.txt nb_NO.txt\
 nn_NO.txt no_NO.txt no_NO_NY.txt th_TH.txt th_TH_TRADITIONAL.txt


# All aliases (to not be included under 'installed'), but not including root.
LANG_ALIAS_SOURCE = $(LANG_SYNTHETIC_ALIAS) az_AZ.txt ha_GH.txt ha_NE.txt ha_NG.txt\
 in.txt iw.txt kk_KZ.txt mo.txt no.txt\
 pa_IN.txt pa_PK.txt sh.txt sh_BA.txt sh_CS.txt\
 sh_YU.txt shi_MA.txt sr_BA.txt sr_CS.txt sr_Cyrl_CS.txt\
 sr_Cyrl_YU.txt sr_Latn_CS.txt sr_Latn_YU.txt sr_ME.txt sr_RS.txt\
 sr_YU.txt tl.txt tl_PH.txt tzm_MA.txt uz_AF.txt\
 uz_UZ.txt zh_CN.txt zh_HK.txt zh_MO.txt zh_SG.txt\
 zh_TW.txt


# Ordinary resources
LANG_SOURCE = af.txt ak.txt am.txt ar.txt\
 as.txt asa.txt az.txt az_Cyrl.txt az_Latn.txt\
 az_Latn_AZ.txt be.txt bem.txt bez.txt bg.txt\
 bm.txt bn.txt bn_IN.txt bo.txt bs.txt\
 ca.txt cgg.txt chr.txt cs.txt cy.txt\
 da.txt dav.txt de.txt de_CH.txt ebu.txt\
 ee.txt el.txt en.txt eo.txt es.txt\
 es_AR.txt es_CL.txt et.txt eu.txt fa.txt\
 fa_AF.txt ff.txt fi.txt fil.txt fil_PH.txt\
 fo.txt fr.txt ga.txt gl.txt gsw.txt\
 gu.txt guz.txt gv.txt ha.txt ha_Latn.txt\
 ha_Latn_GH.txt ha_Latn_NE.txt ha_Latn_NG.txt haw.txt he.txt\
 hi.txt hr.txt hu.txt hy.txt id.txt\
 ig.txt ii.txt is.txt it.txt ja.txt\
 jmc.txt ka.txt kab.txt kam.txt kde.txt\
 kea.txt khq.txt ki.txt kk.txt kk_Cyrl.txt\
 kk_Cyrl_KZ.txt kl.txt kln.txt km.txt kn.txt\
 ko.txt kok.txt kw.txt lag.txt lg.txt\
 lt.txt luo.txt luy.txt lv.txt mas.txt\
 mer.txt mfe.txt mg.txt mk.txt ml.txt\
 mr.txt ms.txt mt.txt my.txt naq.txt\
 nb.txt nd.txt ne.txt nl.txt nl_BE.txt\
 nn.txt nyn.txt om.txt or.txt pa.txt\
 pa_Arab.txt pa_Arab_PK.txt pa_Guru.txt pa_Guru_IN.txt pl.txt\
 ps.txt pt.txt pt_PT.txt rm.txt ro.txt\
 ro_MD.txt rof.txt ru.txt ru_UA.txt rw.txt\
 rwk.txt saq.txt seh.txt ses.txt sg.txt\
 shi.txt shi_Latn.txt shi_Latn_MA.txt shi_Tfng.txt si.txt\
 sk.txt sl.txt sn.txt so.txt sq.txt\
 sr.txt sr_Cyrl.txt sr_Cyrl_BA.txt sr_Cyrl_RS.txt sr_Latn.txt\
 sr_Latn_BA.txt sr_Latn_ME.txt sr_Latn_RS.txt sv.txt sv_FI.txt\
 sw.txt ta.txt te.txt teo.txt th.txt\
 ti.txt to.txt tr.txt tzm.txt tzm_Latn.txt\
 tzm_Latn_MA.txt uk.txt ur.txt uz.txt uz_Arab.txt\
 uz_Arab_AF.txt uz_Cyrl.txt uz_Cyrl_UZ.txt uz_Latn.txt vi.txt\
 vun.txt xog.txt yo.txt zh.txt zh_Hans.txt\
 zh_Hans_CN.txt zh_Hans_SG.txt zh_Hant.txt zh_Hant_HK.txt zh_Hant_MO.txt\
 zh_Hant_TW.txt zu.txt

