// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
 *******************************************************************************
 * 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" },
    };

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