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

it {
    Countries { 
        IT { "Italia" }
        CH { "Svizzera" }
    }
    DateTimeElements { 
            "2",
            "4",
    }
    DateTimePatterns { 
            "HH:mm:ss z",
            "HH:mm:ss z",
            "HH:mm:ss",
            "HH:mm",
            "EEEE d MMMM yyyy",
            "dd MMMM yyyy",
            "dd/MMM/yy",
            "dd/MM/yy",
            "{1} {0}",
    }
    
    AmPmMarkers { 
            "m.",
            "p.",
    }
    
    DayAbbreviations { 
            "dom",
            "lun",
            "mar",
            "mer",
            "gio",
            "ven",
            "sab",
    }
    DayNames { 
            "domenica",
            "luned\u00EC",
            "marted\u00EC",
            "mercoled\u00EC",
            "gioved\u00EC",
            "venerd\u00EC",
            "sabato",
    }
    Eras { 
            "aC",
            "dC",
    }
    Languages { 
        it { "italiano" }
    }
    LocaleID { "10" }
    LocaleString { "it" }
    MonthAbbreviations { 
            "gen",
            "feb",
            "mar",
            "apr",
            "mag",
            "giu",
            "lug",
            "ago",
            "set",
            "ott",
            "nov",
            "dic",
            "",
    }
    MonthNames { 
            "gennaio",
            "febbraio",
            "marzo",
            "aprile",
            "maggio",
            "giugno",
            "luglio",
            "agosto",
            "settembre",
            "ottobre",
            "novembre",
            "dicembre",
            "",
    }
    NumberElements { 
            ",",
            ".",
            ";",
            "%",
            "0",
            "#",
            "-",
            "E",
            "\u2030",
            "\u221E",
            "\uFFFD",
    }
    ShortLanguage { "ita" }
    zoneStrings { 
        {
                "Europe/Rome",
                "CET",
                "CET",
                "CET",
                "CET",
        }
    }
    LocaleScript{ 
                "Latn",  // ISO 15924 Name 
    }

    //------------------------------------------------------------
    // Rule Based Number Format Support
    //------------------------------------------------------------

//         * Spellout rules for Italian.  Like German, most Italian numbers are
//         * written as single words.  What makes these rules complicated is the rule
//         * that says that when a word ending in a vowel and a word beginning with
//         * a vowel are combined into a compound, the vowel is dropped from the
//         * end of the first word: 180 is "centottanta," not "centoottanta."
//         * The complexity of this rule set is to produce this behavior.

        // Can someone confirm that I did the vowel-eliding thing right?  I'm
        // not 100% sure I'm doing it in all the right places, or completely
        // correctly.  Also, I don't have information for negatives and decimals,
        // and I lack words fror values from 1,000,000 on up.

    SpelloutRules {
            // main rule set.  Follows the patterns of the preceding rule sets,
            // except that the final vowel is omitted from words ending in
            // vowels when they are followed by another word; instead, we have
            // separate rule sets that are identical to this one, except that
            // all the words that don't begin with a vowel have a vowel tacked
            // onto them at the front.  A word ending in a vowel calls a
            // substitution that will supply that vowel, unless that vowel is to
            // be elided.
            "%main:\n"
            "    -x: meno >>;\n"
            "    x.x: << virgola >>;\n"
            "    zero; uno; due; tre; quattro; cinque; sei; sette; otto;\n"
            "        nove;\n"
            "    dieci; undici; dodici; tredici; quattordici; quindici; sedici;\n"
            "        diciasette; diciotto; diciannove;\n"
            "    20: venti; vent>%%with-i>;\n"
            "    30: trenta; trent>%%with-i>;\n"
            "    40: quaranta; quarant>%%with-a>;\n"
            "    50: cinquanta; cinquant>%%with-a>;\n"
            "    60: sessanta; sessant>%%with-a>;\n"
            "    70: settanta; settant>%%with-a>;\n"
            "    80: ottanta; ottant>%%with-a>;\n"
            "    90: novanta; novant>%%with-a>;\n"
            "    100: cento; cent[>%%with-o>];\n"
            "    200: <<cento; <<cent[>%%with-o>];\n"
            "    1000: mille; mill[>%%with-i>];\n"
            "    2000: <<mila; <<mil[>%%with-a>];\n"
            "    100,000>>: <<mila[ >>];\n"
            "    1,000,000: =#,##0= (incomplete data);\n"
            "%%with-a:\n"
            "    azero; uno; adue; atre; aquattro; acinque; asei; asette; otto;\n"
            "        anove;\n"
            "    adieci; undici; adodici; atredici; aquattordici; aquindici; asedici;\n"
            "        adiciasette; adiciotto; adiciannove;\n"
            "    20: aventi; avent>%%with-i>;\n"
            "    30: atrenta; atrent>%%with-i>;\n"
            "    40: aquaranta; aquarant>%%with-a>;\n"
            "    50: acinquanta; acinquant>%%with-a>;\n"
            "    60: asessanta; asessant>%%with-a>;\n"
            "    70: asettanta; asettant>%%with-a>;\n"
            "    80: ottanta; ottant>%%with-a>;\n"
            "    90: anovanta; anovant>%%with-a>;\n"
            "    100: acento; acent[>%%with-o>];\n"
            "    200: <%%with-a<cento; <%%with-a<cent[>%%with-o>];\n"
            "    1000: amille; amill[>%%with-i>];\n"
            "    2000: <%%with-a<mila; <%%with-a<mil[>%%with-a>];\n"
            "    100,000: =%main=;\n"
            "%%with-i:\n"
            "    izero; uno; idue; itre; iquattro; icinque; isei; isette; otto;\n"
            "        inove;\n"
            "    idieci; undici; idodici; itredici; iquattordici; iquindici; isedici;\n"
            "        idiciasette; idiciotto; idiciannove;\n"
            "    20: iventi; ivent>%%with-i>;\n"
            "    30: itrenta; itrent>%%with-i>;\n"
            "    40: iquaranta; iquarant>%%with-a>;\n"
            "    50: icinquanta; icinquant>%%with-a>;\n"
            "    60: isessanta; isessant>%%with-a>;\n"
            "    70: isettanta; isettant>%%with-a>;\n"
            "    80: ottanta; ottant>%%with-a>;\n"
            "    90: inovanta; inovant>%%with-a>;\n"
            "    100: icento; icent[>%%with-o>];\n"
            "    200: <%%with-i<cento; <%%with-i<cent[>%%with-o>];\n"
            "    1000: imille; imill[>%%with-i>];\n"
            "    2000: <%%with-i<mila; <%%with-i<mil[>%%with-a>];\n"
            "    100,000: =%main=;\n"
            "%%with-o:\n"
            "    ozero; uno; odue; otre; oquattro; ocinque; osei; osette; otto;\n"
            "        onove;\n"
            "    odieci; undici; ododici; otredici; oquattordici; oquindici; osedici;\n"
            "        odiciasette; odiciotto; odiciannove;\n"
            "    20: oventi; ovent>%%with-i>;\n"
            "    30: otrenta; otrent>%%with-i>;\n"
            "    40: oquaranta; oquarant>%%with-a>;\n"
            "    50: ocinquanta; ocinquant>%%with-a>;\n"
            "    60: osessanta; osessant>%%with-a>;\n"
            "    70: osettanta; osettant>%%with-a>;\n"
            "    80: ottanta; ottant>%%with-a>;\n"
            "    90: onovanta; onovant>%%with-a>;\n"
            "    100: ocento; ocent[>%%with-o>];\n"
            "    200: <%%with-o<cento; <%%with-o<cent[>%%with-o>];\n"
            "    1000: omille; omill[>%%with-i>];\n"
            "    2000: <%%with-o<mila; <%%with-o<mil[>%%with-a>];\n"
            "    100,000: =%main=;\n" 
    }
}
