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

nl {
    Version { "2.0" }
    Countries { 
        NL { "Nederland" }
        BE { "Belgi\u00EB" }
    }
    DateTimeElements:intvector { 
        2,
        4,
    }
    DateTimePatterns { 
        "H:mm:ss' uur' z",
        "H:mm:ss z",
        "H:mm:ss",
        "H:mm",
        "EEEE d MMMM yyyy",
        "d MMMM yyyy",
        "d-MMM-yy",
        "d-M-yy",
        "{1} {0}",
    }
    DayAbbreviations { 
        "zo",
        "ma",
        "di",
        "wo",
        "do",
        "vr",
        "za",
    }
    DayNames { 
        "zondag",
        "maandag",
        "dinsdag",
        "woensdag",
        "donderdag",
        "vrijdag",
        "zaterdag",
    }
    Languages { 
        nl { "Nederlands" }
    }
    LocaleID:int { 0x13 }
//    LocaleString { "nl" }
    MonthAbbreviations { 
        "jan",
        "feb",
        "mrt",
        "apr",
        "mei",
        "jun",
        "jul",
        "aug",
        "sep",
        "okt",
        "nov",
        "dec",
    }
    MonthNames { 
        "januari",
        "februari",
        "maart",
        "april",
        "mei",
        "juni",
        "juli",
        "augustus",
        "september",
        "oktober",
        "november",
        "december",
    }
    NumberElements { 
        ",",
        ".",
        ";",
        "%",
        "0",
        "#",
        "-",
        "E",
        "\u2030",
        "\u221E",
        "\uFFFD",
        ",",
    }
//    ShortLanguage { "nld" }
    zoneStrings { 
        {
            "Africa/Casablanca",
            "GMT",
            "GMT",
            "GMT",
            "GMT",
        }
    }
//    LocaleScript{ 
//        "Latn",  // ISO 15924 Name 
//    }
    ExemplarCharacters { "[a-z \u00e1 \u00e9 \u00ed \u00f3 \u00fa \u00e4 \u00eb \u00ef \u00f6 \u00fc \u0133]" }

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

//     * Spellout rules for Dutch

    // can someone supply me with information on negatives and decimals?

    SpelloutRules {
        "-x: min >>;\n"
        "x.x: << komma >>;\n"
        "(zero?); een; twee; drie; vier; vijf; zes; zeven; acht; negen;\n"
        "tien; elf; twaalf; dertien; veertien; vijftien; zestien;\n"
        "zeventien; achtien; negentien;\n"
        "20: [>> en ]twintig;\n"
        "30: [>> en ]dertig;\n"
        "40: [>> en ]veertig;\n"
        "50: [>> en ]vijftig;\n"
        "60: [>> en ]zestig;\n"
        "70: [>> en ]zeventig;\n"
        "80: [>> en ]tachtig;\n"
        "90: [>> en ]negentig;\n"
        "100: << honderd[ >>];\n"
        "1000: << duizend[ >>];\n"
        "1,000,000: << miljoen[ >>];\n"
        "1,000,000,000: << biljoen[ >>];\n"
        "1,000,000,000,000: =#,##0="
    }

    // Currency display names
    Currencies {
        BEF { "BF", "BEF" }
        NLG { "fl", "NLG" }
    }
}
