/*
 *******************************************************************************
 * Copyright (C) 1996-2000, International Business Machines Corporation and    *
 * others. All Rights Reserved.                                                *
 *******************************************************************************
 *
 * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/resources/Attic/HolidayBundle_de.java,v $ 
 * $Date: 2000/09/20 22:39:12 $ 
 * $Revision: 1.3 $
 *
 *****************************************************************************************
 */

package com.ibm.util.resources;

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; }
};
