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

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