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

eu {
    Version { "2.0" }
    Languages {
        eu { "euskara" }
    }
    DayAbbreviations {
        "ig",
        "al",
        "as",
        "az",
        "og",
        "or",
        "lr",
    }
    DayNames {
        "igandea",
        "astelehena",
        "asteartea",
        "asteazkena",
        "osteguna",
        "ostirala",
        "larunbata",
    }
    MonthAbbreviations {
        "urt",
        "ots",
        "mar",
        "api",
        "mai",
        "eka",
        "uzt",
        "abu",
        "ira",
        "urr",
        "aza",
        "abe",
    }
    MonthNames {
        "urtarrila",
        "otsaila",
        "martxoa",
        "apirila",
        "maiatza",
        "ekaina",
        "uztaila",
        "abuztua",
        "iraila",
        "urria",
        "azaroa",
        "abendua",
    }
    NumberElements {
        ",",
        ".",
        ";",
        "%",
        "0",
        "#",
        "-",
        "E",
        "\u2030",
        "\u221E",
        "\uFFFD",
        ",",
        "+",
    }
    LocaleScript{  
        "Latn",  // ISO 15924 Name 
    }
    ExemplarCharacters { "[a-z \u00f1 \u00e7]" }

    // /**************** Info Below is needed ****************/
    // collations{}
    // Countries{}
    // Eras{}
    // Languages{}
    // ShortLanguage { }
    // localPatternChars{}
    //

    // Currency display names
    Currencies {
        ESP { "\u20A7", "ESP" }
    }
}
