/*
 *******************************************************************************
 * 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_es extends ListResourceBundle {
    static private final Object[][] fContents = {
        {   "All Saints' Day",          "Todos los Santos" },
        {   "Armistice Day",            "D\u00eda del Armisticio" },
        {   "Ascension",                "Ascensi\u00f3n" },
        {   "Benito Ju\u00e1rez Day",        "D\u00eda de la Benito Ju\u00e1rez" },
        {   "Boxing Day",               "D\u00eda en que se dan Aguinaldos Navide\u00f1os" },
        {   "Canada Day",               "D\u00eda del Canad\u00e1" },
        {   "Christmas Eve",            "V\u00EDspera de Navidad" },
        {   "Christmas",                "Navidad" },
        {   "Constitution Day",         "D\u00eda de la Constituci\u00f3n" },
        {   "Day of the Dead",          "D\u00eda de los Muertos" },
        {   "Easter Sunday",            "Pascua" },
        {   "Easter Monday",            "Pascua Lunes" },
        {   "Epiphany",                 "Epifan\u00eda" },
        {   "Father's Day",             "D\u00eda del Padre" },
        {   "Flag Day",                 "D\u00eda de la Bandera" },
        {   "Good Friday",              "Viernes Santo" },
        {   "Halloween",                "v\u00edspera de Todos los Santos" },
        {   "Independence Day",         "D\u00eda de la Independencia" },
        {   "Labor Day",                "D\u00eda de Trabajadores" },
        {   "Maundy Thursday",          "Jueves Santo" },
        {   "May Day",                  "Primero de Mayo" },
        {   "Memorial Day",             "D\u00eda de la Rememoraci\u00f3n" },
        {   "Mother's Day",             "D\u00eda de la Madre" },
        {   "New Year's Day",           "A\u00f1o Nuevo" },
        {   "Palm Sunday",              "Domingo de Ramos" },
        {   "Pentecost",                "Pentecost\u00e9s" },
        {   "Presidents' Day",          "D\u00eda de Presidentes" },
        {   "Revolution Day",           "D\u00eda de la Revoluci\u00f3n" },
        {   "Shrove Tuesday",           "Martes de Carnaval" },
        {   "Thanksgiving",             "D\u00eda de Acci\u00f3n de Gracias" },
        {   "Veterans' Day",            "D\u00eda de Veteranos" },
        {   "Victoria Day",             "D\u00eda de Victoria" },
        {   "Whit Sunday",              "Pentecost\u00e9s" },
    };

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