// ***************************************************************************
// *
// *   Copyright (C) 1997-2002, International Business Machines
// *   Corporation and others.  All Rights Reserved.
// *
// ***************************************************************************

// Experimental locales are commented out

index {
    InstalledLocales {
        af,
        af_ZA,
//        am,
//        am_ET,
        ar,
        ar_AE,
        ar_BH,
        ar_DZ,
        ar_EG,
        ar_IN,
        ar_IQ,
        ar_JO,
        ar_KW,
        ar_LB,
        ar_LY,
        ar_MA,
        ar_OM,
        ar_QA,
        ar_SA,
        ar_SD,
        ar_SY,
        ar_TN,
        ar_YE,
//        az,
//        az_AZ,
        be,
        be_BY,
        bg,
        bg_BG,
        bn,
        bn_IN,
        ca,
        ca_ES,
        ca_ES_PREEURO,
        cs,
        cs_CZ,
        da,
        da_DK,
        de,
        de__PHONEBOOK,
        de_AT,
        de_AT_PREEURO,
        de_BE,
        de_CH,
        de_DE,
        de_DE_PREEURO,
//        de_LI,
        de_LU,
        de_LU_PREEURO,
//        div,
//        div_MV,
        el,
        el_GR,
        el_GR_PREEURO,
        en,
//        en_AS,
        en_AU,
        en_BE,
        en_BE_PREEURO,
        en_BW,
//        en_BZ,
        en_CA,
        en_GB,
        en_GB_EURO,
//        en_GU,
        en_HK,
        en_IE,
        en_IE_PREEURO,
        en_IN,
//        en_JM,
//        en_MH,
//        en_MP,
        en_MT,
        en_NZ,
        en_PH,
        en_SG,
//        en_TT,
//        en_UM,
        en_US,
        en_US_POSIX,
        en_VI,
        en_ZA,
        en_ZW,
        eo,
        es,
        es__TRADITIONAL,
        es_AR,
        es_BO,
        es_CL,
        es_CO,
        es_CR,
        es_DO,
        es_EC,
        es_ES,
        es_ES_PREEURO,
        es_GT,
        es_HN,
        es_MX,
        es_NI,
        es_PA,
        es_PE,
        es_PR,
        es_PY,
        es_SV,
        es_US,
        es_UY,
        es_VE,
        et,
        et_EE,
        eu,
        eu_ES,
        eu_ES_PREEURO,
        fa,
        fa_IN,
        fa_IR,
        fi,
        fi_FI,
        fi_FI_PREEURO,
        fo,
        fo_FO,
        fr,
        fr_BE,
        fr_BE_PREEURO,
        fr_CA,
        fr_CH,
        fr_FR,
        fr_FR_PREEURO,
        fr_LU,
        fr_LU_PREEURO,
//        fr_MC,
        ga,
        ga_IE,
        ga_IE_PREEURO,
        gl,
        gl_ES,
        gl_ES_PREEURO,
//        gu,
//        gu_IN,
        gv,
        gv_GB,
        he,
        he_IL,
        hi,
        hi__DIRECT,
        hi_IN,
        hr,
        hr_HR,
        hu,
        hu_HU,
//        hy,
//        hy_AM,
//        hy_AM_REVISED,
        id,
        id_ID,
        is,
        is_IS,
        it,
        it_CH,
        it_IT,
        it_IT_PREEURO,
        ja,
        ja_JP,
//        ka,
//        ka_GE,
//        kk,
//        kk_KZ,
        kl,
        kl_GL,
//        kn,
//        kn_IN,
        ko,
        ko_KR,
        kok,
        kok_IN,
        kw,
        kw_GB,
//        ky,
//        ky_KG,
        lt,
        lt_LT,
        lv,
        lv_LV,
        mk,
        mk_MK,
//        mn,
//        mn_MN,
        mr,
        mr_IN,
//        ms,
//        ms_MY,
        mt,
        mt_MT,
        nb,
        nb_NO,
        nl,
        nl_BE,
        nl_BE_PREEURO,
        nl_NL,
        nl_NL_PREEURO,
        nn,
        nn_NO,
//        no,   // split into nn and nb locales
//        no_NO,
//        no_NO_NY,
//        om,
//        om_ET,
//        om_KE,
//        pa,
//        pa_IN,
        pl,
        pl_PL,
        pt,
        pt_BR,
        pt_PT,
        pt_PT_PREEURO,
        ro,
        ro_RO,
        ru,
        ru_RU,
        ru_UA,
//        sa,
//        sa_IN,
        sh,
        sh_YU,
        sk,
        sk_SK,
        sl,
        sl_SI,
//        so,
//        so_DJ,
//        so_ET,
//        so_KE,
//        so_SO,
        sq,
        sq_AL,
        sr,
        sr_YU,
//        syr,
//        syr_SY,
        sv,
        sv_FI,
        sv_FI_AL,   // fallback to sv_FI
        sv_SE,
        sw,
        sw_KE,
        sw_TZ,
        ta,
        ta_IN,
        te,
        te_IN,
        th,
        th_TH,
//        ti,
//        ti_ER,
//        ti_ET,
        tr,
        tr_TR,
//        tt,
//        tt_RU,
        uk,
        uk_UA,
//        ur,
//        ur_PK,
//        uz,
//        uz_UZ,
        vi,
        vi_VN,
        zh,
        zh__PINYIN,
        zh_CN,
        zh_HK,
        zh_MO,
        zh_SG,
        zh_TW,
        zh_TW_STROKE,
    }
}
