/*
 *******************************************************************************
 * Copyright (C) 1996-2000, International Business Machines Corporation and    *
 * others. All Rights Reserved.                                                *
 *******************************************************************************
 *
 * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/icu/impl/data/HolidayBundle_de.java,v $ 
 * $Date: 2002/02/16 03:05:44 $ 
 * $Revision: 1.4 $
 *
 *****************************************************************************************
 */

package com.ibm.icu.impl.data;

import java.util.ListResourceBundle;

public class HolidayBundle_de extends ListResourceBundle {
    static private final Object[][] fContents = {
        {   "All Saints' Day",              "Allerheiligen" },
        {   "All Souls' Day",               "Allerseelen" },
        {   "Armistice Day",                "Waffenstillstandstag" },
        {   "Ascension",                    "Christi Himmelfahrt" },
        {   "Ash Wednesday",                "Aschermittwoch" },
        {   "Assumption",                   "Mari\u00e4 Himmelfahrt" },
        {   "Boxing Day",                   "2. Weihnachtstag" },
        {   "Carnival",                     "Karneval" },
        {   "Christmas",                    "Weihnachtstag" },
        {   "Civic Holiday",                "B\u00fcrgerfeiertag" },
        {   "Constitution Day",             "Verfassungstag" },
        {   "Corpus Christi",               "Fronleichnam" },
        {   "Day of Prayer and Repentance", "Bu\u00df- und Bettag" },
        {   "Easter Monday",                "Ostermonntag" },
        {   "Easter Sunday",                "Ostersonntag" },
        {   "Epiphany",                     "Heilige 3 K\u00f6nige" },
        {   "Father's Day",                 "Vatertag" },
        {   "Flag Day",                     "Jahrestag der Nationalflagge" },
        {   "German Unity Day",             "Tag der deutschen Einheit" },
        {   "Good Friday",                  "Karfreitag" },
        {   "Halloween",                    "Abend vor Allerheiligen" },
        {   "Immaculate Conception",        "Mari\u00e4 Empf\u00e4ngnis" },
        {   "Independence Day",             "Unabh\u00e4ngigkeitstag" },
        {   "Labor Day",                    "Tag der Arbeit" },
        {   "Liberation Day",               "Befreiungstag" },
        {   "Mardi Gras",                   "Faschingsdienstag" },
        {   "Maundy Thursday",              "Gr\u00fcndonnerstag" },
        {   "May Day",                      "Maifeiertag" },
        {   "Memorial Day",                 "Tag des Gedenkens" },
        {   "Mother's Day",                 "Muttertag" },
        {   "National Holiday",             "Nationalfeiertag" },
        {   "New Year's Day",               "Neujahr" },
        {   "New Year's Eve",               "Silvesterabend" },
        {   "Palm Sunday",                  "Palmsonntag" },
        {   "Pentecost",                    "Pfingsten" },
        {   "Presidents' Day",              "Pr\u00e4sidentstag" },
        {   "Remembrance Day",              "Volkstrauertag" },
        {   "Revolution Day",               "Jahrestag der Revolution" },
        {   "Rose Monday",                  "Rosenmontag" },
        {   "St. Stephen's Day",            "Stephanitag" },
        {   "Shrove Tuesday",               "Faschingsdienstag" },
        {   "Spring Holiday",               "Tag des Fr\u00fchlings" },
        {   "Summer Bank Holiday",          "Bankfeiertag" },
        {   "Thanksgiving",                 "Dankfest" },
        {   "Unity Day",                    "Einheitstag" },
        {   "Veterans' Day",                "Veteranstag" },
        {   "Victory Day",                  "Tag der Befreiung" },
        {   "Washington's Birthday",        "Washingtons Geburtstag" },
        {   "Whit Monday",                  "Pfingstmontag" },
        {   "Whit Sunday",                  "Pfingstsonntag" },
    };

    public synchronized Object[][] getContents() { return fContents; }
};
