###############################################################################
# Copyright (c) 2001, 2004 IBM Corporation and others.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
# 
# Contributors:
#     IBM Corporation - initial API and implementation
###############################################################################

TITLE_WSEXPLORER=Explorador de servicios Web

# Tree Nodes
ALT_OPEN=Abrir
ALT_CLOSE=Cerrar

# Perspective Toolbar
ALT_BACK=Anterior
ALT_FORWARD=Siguiente
ALT_ACTION_ENGINE=Grabador de acciones
ALT_UDDI_PERSPECTIVE=P\u00e1gina UDDI
ALT_WSIL_PERSPECTIVE=P\u00e1gina WSIL
ALT_WSDL_PERSPECTIVE=P\u00e1gina WSDL
ALT_FAVORITES_PERSPECTIVE=Favoritos

# Toolbars
ALT_DOUBLE_CLICK_TO_MAXIMIZE=Doble pulsaci\u00f3n para maximizar
ALT_DOUBLE_CLICK_TO_RESTORE=Doble pulsaci\u00f3n para restaurar

# SetDefaultViewTool
ALT_BACK_TO_TOP=Volver al inicio

# Common Actions
ALT_REFRESH=Renovar
ALT_CLEAR=Borrar
ALT_RESULTS=Resultados

# Common Labels
ALT_NAVIGATOR=Navegador
ALT_ACTIONS=Acciones
ALT_STATUS=Estado
ALT_OTHER_ACTIONS=Otras acciones
FORM_BUTTON_GO=&nbsp;&nbsp;Ir&nbsp;&nbsp;
FORM_BUTTON_RESET=Restablecer
FORM_BUTTON_CANCEL=Cancelar
FORM_LABEL_ACTIONS=Acciones
FORM_LABEL_ACTIONS_NONE=Ninguna

# Placeholder for blank table entries
TABLE_BLANK_PLACEHOLDER=--

# Common Form Control Titles
FORM_CONTROL_TITLE_SELECT_ALL_CHECK_BOX=Seleccionar todo
FORM_CONTROL_TITLE_SELECT_ROW_CHECK_BOX=Seleccionar fila

# Common Messages
MSG_ERROR_UNEXPECTED=IWAB0135E Se ha producido un error inesperado.
MSG_ERROR_NO_ACTION_SELECTED=IWAB0124E Seleccione una acci\u00f3n.
MSG_ERROR_NO_NODE_SELECTED=IWAB0125E Seleccione un nodo.
MSG_SUBMIT_IN_PROGRESS=Por favor, espere. La operaci\u00f3n est\u00e1 todav\u00eda en proceso.
MSG_LOAD_IN_PROGRESS=Espere mientras se carga el formulario...

#LaunchWebServiceWizardAction
ALT_LAUNCH_WEB_SERVICE_WIZARD=Lanzar asistente de servicio Web
FORM_LABEL_CHOOSE_WIZARD=Seleccione un asistente a lanzar:
FORM_RADIO_WEB_SERVICE_CLIENT_WIZARD=Cliente de servicio Web
FORM_RADIO_WEB_SERVICE_SKELETON_WIZARD=Esqueleto de servicio Web
MSG_ERROR_WIZARD_ALREADY_RUNNING=IWAB0126E Ya hay un asistente de servicio Web en proceso.  Termine con el asistente existente antes de lanzar uno nuevo.
MSG_ERROR_WSDL_URL_IS_UNREACHABLE=IWAB0127E El documento WSDL no es alcanzable.

# ImportToFileSystemAction
ALT_WSIL_IMPORT_TO_FS=Importar WSIL al sistema de archivos
ALT_WSDL_IMPORT_TO_FS=Importar WSDL al sistema de archivos
MSG_ERROR_RETRIEVING_WSDL_DOC=IWAB0128E No se puede recuperar el documento WSDL.
MSG_ERROR_RETRIEVING_WSIL_DOC=IWAB0129E No se puede recuperar el documento WSIL.
MSG_IMPORT_WSDL_SUCCESSFUL=El documento WSDL se ha importado satisfactoriamente.
MSG_IMPORT_WSIL_SUCCESSFUL=El documento WSIL se ha importado satisfactoriamente.

# ImportToWorkbenchAction
ALT_IMPORT_WSDL_TO_WORKBENCH=Importar WSDL a entorno de trabajo
FORM_LABEL_IMPORT_TO_WORKBENCH_DESC=Seleccione un proyecto en el que guardar el archivo WSDL. Tambi\u00e9n puede cambiar el nombre del archivo WSDL.
WEB_PROJECT_NAME=Proyecto Web:
WORKBENCH_PROJECT_NAME=Proyecto de entorno de trabajo:
LABEL_IMPORT_WSDL=Importar documento WSDL
LABEL_IMPORT_TO_WSIL=Importar como referencia de servicio a un documento WSIL
IMPORTED_WSDL_FILE_NAME=Nombre de archivo WSDL:
WSIL_FILE_NAME=Nombre de archivo WSIL:
MSG_ERROR_FILE_OVERWRITE_DISABLED=IWAB0164E No se puede crear el archivo %2 relativo a la v\u00eda de acceso %1 debido a que la sobrescritura autom\u00e1tica de archivos no se ha habilitado. \u00bfDesea habilitarla para este archivo?
MSG_ERROR_INVALID_WORKBENCH_PROJECT=IWAB0130E Seleccione un proyecto de entorno de trabajo.
MSG_ERROR_INVALID_WSDL_FILE_NAME=IWAB0131E Nombre de archivo no v\u00e1lido.
MSG_ERROR_INVALID_WSIL_FILE_NAME=IWAB0470E Nombre de archivo WSIL no v\u00e1lido.
MSG_ERROR_NO_IMPORT_OPTION_SELECTED=IWAB0471E No se ha seleccionado ninguna opci\u00f3n de importaci\u00f3n.  Elija una opci\u00f3n de importaci\u00f3n como m\u00ednimo.
MSG_ERROR_WRITING_TEMP_FILE_TO_FS=IWAB0132E No se puede escribir en el archivo temporal.
MSG_INFO_IMPORT_TO_WORKBENCH_SUCCESSFUL=IWAB0314I %1 se ha importado satisfactoriamente en el entorno de trabajo.
MSG_INFO_IMPORT_SERVICE_REF_TO_WSIL_SUCCESSFUL=IWAB0472I La referencia de servicio se ha importado satisfactoriamente a %1.

# CheckWorkbenchFileReadOnlyAction
MSG_ERROR_FILE_CHECKOUT_DISABLED=IWAB0164E No se puede crear el archivo %2 relativo a la v\u00eda de acceso %1 debido a que la reserva autom\u00e1tica de archivos no se ha habilitado. \u00bfDesea habilitarla para este archivo?

# ClearNodeAction
MSG_INFO_NODE_CLEARED=IWAB0133I %1 borrado.

# Table twistees
ALT_TWIST_OPENED=Ocultar
ALT_TWIST_CLOSED=Expandir

# WSDL Browser
FORM_LINK_BROWSE=Examinar...
TITLE_WSDL_BROWSER=Navegador WSDL - %1
FORM_LABEL_WSDL_SOURCE=Seleccione un origen WSDL:
FORM_LABEL_WSDL_SOURCE_WEBPROJECTS=Proyectos Web
FORM_LABEL_WSDL_SOURCE_FAVORITES=Favoritos
FORM_LABEL_WEB_PROJECT=Proyecto Web
FORM_LABEL_WSDL_URL=URL WSDL
FORM_BUTTON_REFRESH=Renovar
ALT_WSDL_BROWSER=Navegador WSDL
WSDL_TYPE_SERVICE_INTERFACES=Interfaces de servicio
WSDL_TYPE_SERVICES=Servicios

# Calendar Browser
TITLE_CALENDAR_BROWSER=Navegador de calendario
# 2 character abbreviations for days of the week.
FORM_LABEL_SH_SUNDAY=Do
FORM_LABEL_SH_MONDAY=Lu
FORM_LABEL_SH_TUESDAY=Ma
FORM_LABEL_SH_WEDNESDAY=Mi
FORM_LABEL_SH_THURSDAY=Ju
FORM_LABEL_SH_FRIDAY=Vi
FORM_LABEL_SH_SATURDAY=S\u00e1
# Months of the year
FORM_LABEL_MONTH=Mes:
FORM_LABEL_JANUARY=Enero
FORM_LABEL_FEBRUARY=Febrero
FORM_LABEL_MARCH=Marzo
FORM_LABEL_APRIL=Abril
FORM_LABEL_MAY=Mayo
FORM_LABEL_JUNE=Junio
FORM_LABEL_JULY=Julio
FORM_LABEL_AUGUST=Agosto
FORM_LABEL_SEPTEMBER=Septiembre
FORM_LABEL_OCTOBER=Octubre
FORM_LABEL_NOVEMBER=Noviembre
FORM_LABEL_DECEMBER=Diciembre
FORM_LABEL_YEAR=A\u00f1o:
FORM_LABEL_TIME=Hora:
FORM_LINK_TODAY=Hoy
FORM_LINK_PREVIOUS_YEAR=<<
FORM_LINK_PREVIOUS_MONTH=<
FORM_LINK_NEXT_MONTH=>
FORM_LINK_NEXT_YEAR=>>
ALT_PREVIOUS_YEAR=A\u00f1o anterior
ALT_PREVIOUS_MONTH=Mes anterior
ALT_NEXT_MONTH=Mes siguiente
ALT_NEXT_YEAR=A\u00f1o siguiente
ALT_TODAY=Hoy
ALT_CALENDAR_BROWSER=Navegador de calendario
MSG_ERROR_INVALID_TIME_FORMAT=IWAB0368E El formato de la hora no es HH:MM:SS[.SSS]. \u00bfDesea utilizar la hora actual en su lugar?

# Action engine
TITLE_ACTION_RECORDER=Grabador de acciones
FORM_LABEL_MODE=Modalidad:
FORM_LABEL_MODE_PLAY=Reproducir
FORM_LABEL_MODE_STOP=Detener
FORM_LABEL_MODE_RECORD=Grabar
FORM_LABEL_SAVE=Guardar
FORM_LABEL_PLAY_FILE=Archivo de reproducci\u00f3n:
MSG_ERROR_INVALID_PLAY_FILE=IWAB0362E Especifique un archivo de reproducci\u00f3n.

# Frame titles
FRAME_TITLE_PERSPECTIVE_WORKAREA=\u00c1rea de trabajo interno del explorador de servicios Web
FRAME_TITLE_PERSPECTIVE_TOOLBAR=Barra de herramientas del explorador de servicios Web
FRAME_TITLE_PERSPECTIVE_CONTENT=Contenido de la p\u00e1gina del explorador de servicios Web
FRAME_TITLE_WSDL_TOOLBAR=Barra de herramientas del navegador WSDL
FRAME_TITLE_WSDL_CONTENT=Contenido del navegador WSDL

# Form titles
FORM_TITLE_PAGE_LOADER=Cargador de p\u00e1ginas
FORM_TITLE_PAGE_CONTENT=Contenido de p\u00e1gina cargada
FORM_TITLE_LAUNCH_WEBSERVICE_WIZARD=Lanzar formulario del asistente de servicio Web
FORM_TITLE_IMPORT_TO_WORKBENCH=Importar a formulario de entorno de trabajo
