###############################################################################
# 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=WSDL

# Nodes
NODE_NAME_WSDL_MAIN=Principal de WSDL

# Frame titles
FRAME_TITLE_NAVIGATOR_CONTAINER=Contenedor del navegador
FRAME_TITLE_NAVIGATOR_TOOLBAR=Barra de herramientas del navegador
FRAME_TITLE_NAVIGATOR_CONTENT=Contenido del navegador
FRAME_TITLE_ACTIONS_CONTAINER=Contenedor de acciones
FRAME_TITLE_PROPERTIES_CONTAINER=Contenedor de propiedades
FRAME_TITLE_PROPERTIES_TOOLBAR=Barra de herramientas de propiedades
FRAME_TITLE_PROPERTIES_CONTENT=Contenido de propiedades
FRAME_TITLE_STATUS_CONTAINER=Contenedor de estado
FRAME_TITLE_STATUS_TOOLBAR=Barra de herramientas de estado
FRAME_TITLE_STATUS_CONTENT=Contenido de estado
FRAME_TITLE_WSDL_PERSPECTIVE_CONTENT=Contenido de p\u00e1gina WSDL
FRAME_TITLE_XSD_INFORMATION_TOOLBAR=Barra de herramientas de di\u00e1logo de informaci\u00f3n XSD
FRAME_TITLE_XSD_INFORMATION_CONTENT=Contenido de di\u00e1logo de informaci\u00f3n XSD

# OpenWSDLAction
ALT_OPEN_WSDL=Abrir WSDL
MSG_ERROR_INVALID_WSDL_URL=IWAB0378E Entre un URL WSDL v\u00e1lido.
MSG_ERROR_OPEN_WSDL=IWAB0379E No se puede abrir %1.
MSG_ERROR_XSD_VALIDATION=IWAB0380E Se han encontrado errores al validar esquemas XML.
MSG_INFO_OPEN_WSDL_SUCCESSFUL=IWAB0381I %1 se ha abierto satisfactoriamente.

# WSDL Element details
ALT_WSDL_DETAILS=Detalles de WSDL
FORM_LABEL_WSDL_DETAILS_DESC=A continuaci\u00f3n se muestran los detalles de este documento WSDL. Pulse sobre un servicio o enlace para ver los detalles correspondientes.

# WSDL Service Element details
ALT_WSDL_SERVICE_DETAILS=Detalles de servicio WSDL
FORM_LABEL_SERVICE_DETAILS_DESC=A continuaci\u00f3n se muestran los detalles para este elemento &lt;service&gt;. Pulse sobre un enlace para ver las operaciones correspondientes.

# WSDL Binding Element details
ALT_WSDL_BINDING_DETAILS=Detalles de enlace WSDL
FORM_LABEL_BINDING_DETAILS_DESC=A continuaci\u00f3n se muestran los detalles para este elemento &lt;binding&gt; <strong>%1</strong>. Pulse sobre una operaci\u00f3n para cumplimentar los par\u00e1metros e invocarla o especificar puntos finales adicionales.

# InvokeWSDLOperationAction
ALT_INVOKE_WSDL_OPERATION=Invocar una operaci\u00f3n WSDL
MSG_ERROR_UNABLE_TO_CONNECT=IWAB0382E No es posible conectar con %1
MSG_ERROR_VALIDATING_PARAMETER=IWAB0383E Error al validar %1

# WSDLAddToFavoritesAction
ALT_ADD_WSDL_TO_FAVORITES=A\u00f1adir WSDL a favoritos
MSG_ERROR_FAVORITES_ALREADY_EXISTS=IWAB0384E %1 ya existe en los favoritos.
MSG_ERROR_ADD_TO_FAVORITES=IWAB0385E No se puede a\u00f1adir %1 a los favoritos.
MSG_INFO_ADD_TO_FAVORITES_SUCCESSFUL=IWAB0386I %1 se a\u00f1ade a los favoritos.
MSG_QUESTION_OVERWRITE_FAVORITES=El favorito ya existe.  \u00bfDesea sobrescribirlo?

# RefreshWSDLAction
MSG_INFO_REFRESH_WSDL_SUCCESSFUL=IWAB0387I %1 se renueva.
MSG_QUESTION_REMOVE_WSDL_NODE=%1 ya no puede resolverse.  \u00bfDesea borrarlo?

# UpdateWSDLBindingAction
MSG_INFO_UPDATE_WSDL_BINDING_SUCCESSFUL=IWAB0388I Los puntos finales se han actualizado satisfactoriamente.

# Form titles
FORM_TITLE_OPEN_WSDL=Abrir formulario WSDL
FORM_TITLE_WSDL_DETAILS=Formulario Detalles de WSDL
FORM_TITLE_WSDL_SERVICE_DETAILS=Formulario Detalles de servicio WSDL
FORM_TITLE_WSDL_BINDING_DETAILS=Formulario Detalles de enlace WSDL
FORM_TITLE_INVOKE_WSDL_OPERATION=Formulario Operaci\u00f3n WSDL

# Form Labels
FORM_LABEL_OPEN_WSDL_DESC=Especifique el URL de un documento WSDL y pulse <strong>Ir</strong> para explorar.
FORM_LABEL_SERVICES=Servicios
FORM_LABEL_BINDINGS=Enlaces
FORM_LABEL_OPERATIONS=Operaciones
FORM_LABEL_BINDING_TYPE=Tipo
FORM_LABEL_BINDING_TYPE_UNSUPPORTED=No soportado
FORM_LABEL_BINDING_TYPE_SOAP=SOAP
FORM_LABEL_BINDING_TYPE_HTTP_GET=HTTP GET
FORM_LABEL_BINDING_TYPE_HTTP_POST=HTTP POST
FORM_LABEL_NAME=Nombre
FORM_LABEL_DOCUMENTATION=Documentaci\u00f3n
FORM_LABEL_ENDPOINT=Punto final
FORM_LABEL_INVOKE_WSDL_OPERATION_DESC=Especifique los par\u00e1metros de esta operaci\u00f3n WSDL y pulse <strong>Ir</Strong> para invocar.
FORM_LINK_ADD=A\u00f1adir
FORM_LINK_REMOVE=Eliminar
FORM_LABEL_VALUES=Valores
FORM_LABEL_ENABLE_DISABLE_GROUP=Habilitar/inhabilitar grupo
FORM_LABEL_UNION_TYPE=Tipos de uni\u00f3n
FORM_LABEL_LANGUAGE=Lenguaje
FORM_LABEL_XSD_APPLICATION_INFORMATION=Informaci\u00f3n de aplicaci\u00f3n
FORM_LABEL_XSD_DOCUMENTATION=Documentaci\u00f3n
FORM_LABEL_SOAP_REQUEST_ENVELOPE=Sobre de petici\u00f3n SOAP:
FORM_LABEL_SOAP_RESPONSE_ENVELOPE=Sobre de respuesta SOAP:
FORM_LABEL_GROUP_ALL_ORDERING_MOVE_UP=Subir elemento
FORM_LABEL_GROUP_ALL_ORDERING_MOVE_DOWN=Bajar elemento
FORM_LABEL_BASE_TYPE=Tipo base
FORM_LABEL_UNBOUNDED=No enlazado
FORM_LABEL_LENGTH=Longitud
FORM_LABEL_LENGTH_VALUE=[%1..%2]
FORM_LABEL_PATTERN=Patr\u00f3n
FORM_LABEL_WHITESPACE=Espacio en blanco
FORM_LABEL_RANGE_OF_VALUES=Rango de valores
FORM_LABEL_MIN_EXCLUSIVE=(%1..
FORM_LABEL_MIN_INCLUSIVE=[%1..
FORM_LABEL_MAX_EXCLUSIVE=%1)
FORM_LABEL_MAX_INCLUSIVE=%1]
FORM_LABEL_TOTAL_DIGITS=D\u00edgitos totales
FORM_LABEL_FRACTION_DIGITS=D\u00edgitos de fracci\u00f3n
FORM_LABEL_OCCURANCE=Aparici\u00f3n de
FORM_LABEL_UNION_MEMBERS=Miembros de uni\u00f3n
FORM_LABEL_LIST_ITEMS=Elementos de la lista
FORM_LABEL_ELEMENTS=Elementos
FORM_LABEL_SOAP_ENC_ARRAYS=Matrices SOAP
FORM_LABEL_CONTENT=Contenido
FORM_LABEL_ATOMIC_NAME_TYPE=%1 (%2):
FORM_LABEL_NULL=nulo
FORM_LABEL_GROUP_NUMBER=Grupo %1
FORM_LABEL_CHOICES=Opciones
FORM_LABEL_NOTHING_TO_DISPLAY_IN_FORM_VIEW=No hay nada que visualizar en la vista del formulario.  Pase a la vista de fuente para la petici\u00f3n y la respuesta SOAP.
FORM_LABEL_SOAP_RESPONSE_FAILED_VALIDATION_IN_FORM_VIEW=La respuesta SOAP no ha pasado la validaci\u00f3n de esquema.  Pase a la vista de fuente para la petici\u00f3n SOAP en formato XML.
FORM_LABEL_END_POINTS=Puntos finales

# Source/Form views
FORM_LINK_FORM=Formulario
ALT_SWITCH_TO_FORM_VIEW=Pasar a la vista de formulario
FORM_LINK_SOURCE=Fuente
ALT_SWITCH_TO_SOURCE_VIEW=Pasar a la vista de fuente
FORM_LABEL_FRAGMENT_SOAP_VIEW_CONTENT=Cuerpo Soap:
BUTTON_LABEL_LOAD=Cargar
BUTTON_LABEL_SAVE_AS=Guardar como...
MSG_QUESTION_SYNC_VIEWS=El formato del contenido fuente puede alterarse al pasar a la vista de formulario.  \u00bfDesea continuar?
MSG_QUESTION_SYNC_VIEWS_DESPITE_INVALID_SOURCE_CONTENT=El contenido de la vista fuente no ha pasado la validaci\u00f3n de esquema.  \u00bfDesea sincronizar de todos modos?  (El contenido de la vista de fuente puede modificarse)

# Form control titles
FORM_CONTROL_TITLE_ENABLE_DISABLE_GROUP=Habilitar/inhabilitar grupo
FORM_CONTROL_TITLE_SELECT_ELEMENT_IN_GROUP=Seleccionar elemento del grupo
FORM_CONTROL_TITLE_SELECT_UNION_TYPE=Seleccionar tipo de uni\u00f3n
FORM_CONTROL_TITLE_SOAP_FILE=Archivo de datos SOAP

# XSD Information Dialog
TITLE_XSD_INFORMATION_DIALOG=Di\u00e1logo informativo de XSD

# Error messages
MSG_ERROR_NOTHING_SELECTED=IWAB0389E Seleccione como m\u00ednimo un elemento.
MSG_ERROR_MAX_OCCURS_VIOLATION=IWAB0390E Se ha alcanzado el n\u00famero m\u00e1ximo de apariciones.
MSG_ERROR_MIN_OCCURS_VIOLATION=IWAB0391E Se ha alcanzado el n\u00famero m\u00ednimo de apariciones.
MSG_ERROR_CANNOT_MOVE_FIRST_ELEMENT_UP=IWAB0392E El elemento seleccionado ya es el primero del grupo.
MSG_ERROR_CANNOT_MOVE_LAST_ELEMENT_DOWN=IWAB0393E El elemento seleccionado ya es el \u00faltimo del grupo.
