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

# Navigator
WSIL_MAIN_NODE=WSIL - Principal

# Forms
FORM_LABEL_URL=URL
FORM_LABEL_ITEM_NUMBER=Elemento #
FORM_LABEL_UDDI_BUSINESS_NAME=Nombre de empresa UDDI
FORM_LABEL_UDDI_SERVICE_NAME=Nombre de servicio UDDI
FORM_LABEL_LANGUAGE=Lenguaje
FORM_LABEL_ABSTRACT=Abstracto
FORM_LABEL_NAME=Nombre
FORM_LABEL_WSDL_BINDINGS=Enlaces WSDL
FORM_LABEL_NAMESPACE_URI=URI de espacio de nombres
FORM_LABEL_LOCAL_NAME=Nombre local
FORM_LABEL_INQUIRY_API=API de consulta
FORM_LABEL_SERVICE_KEY=Clave de servicio
FORM_LABEL_BUSINESS_KEY=Clave de empresa
FORM_LABEL_DISCOVERY_URL=URL de descubrimiento
FORM_LABEL_WSIL=Detalles de WSIL
FORM_LABEL_WSIL_LINKS=Enlaces WSIL
FORM_LABEL_WSDL_SERVICE=Servicios WSDL
FORM_LABEL_UDDI_SERVICE=Servicios UDDI
FORM_LABEL_UDDI_BUSINESS=Empresas UDDI
FORM_LABEL_ADD_TO_NAVIGATOR=A\u00f1adir a navegador
FORM_LABEL_ADD_TO_FAVORITES=A\u00f1adir a favoritos
FORM_LABEL_ADD_TO_UDDI_PERSPECTIVE=A\u00f1adir a p\u00e1gina UDDI
FORM_LABEL_ADD_TO_WSDL_PERSPECTIVE=A\u00f1adir a p\u00e1gina WSDL
FORM_LABEL_REFRESH=Renovar
FORM_LABEL_NA=N/D
FORM_LABEL_UNAVAILABLE_UDDI_SERVICE=Servicio no disponible:
FORM_LABEL_UNAVAILABLE_UDDI_BUSINESS=Empresa no disponible:
FORM_LABEL_CHOOSE_WSIL_INSPECTION_TYPE=Elija el tipo de objetos que desea inspeccionar:
MSG_ERROR_NOTHING_SELECTED=IWAB0328E Seleccione como m\u00ednimo un elemento.

# OpenWSILAction
ALT_OPEN_WSIL=Abrir WSIL
FORM_LABEL_OPEN_WSIL_DESC=Entre el URL de un documento WSIL o un documento HTML y pulse <strong>Ir</strong> para abrir la inspecci\u00f3n.
WSIL_URL=URL para documento:
MSG_ERROR_INVALID_WSIL_URL=IWAB0394E %1 no es un URL WSIL ni un URL HTML v\u00e1lido.
MSG_ERROR_WSIL_ALREADY_OPENED=IWAB0329E %1 ya est\u00e1 abierto en el navegador.
MSG_INFO_OPEN_WSIL_SUCCESSFUL=IWAB0330I %1 se ha abierto satisfactoriamente.

# OpenWSILLinkAction
ALT_OPEN_WSIL_LINK=Abrir enlace WSIL
MSG_ERROR_WSIL_LINK_ALREADY_OPENED=IWAB0331E %1 ya est\u00e1 abierto en el navegador
MSG_INFO_OPEN_WSIL_LINK_SUCCESSFUL=IWAB0332I %1 se ha abierto satisfactoriamente.

# WsilDetailsAction
ALT_WSIL_DETAILS=Detalles de WSIL

# WsilServiceDetailsAction
ALT_WSIL_SERVICE_DETAILS=Detalles de servicio WSIL

# UddiLinkDetailsAction
ALT_UDDI_LINK_DETAILS=Detalles de empresa UDDI

# WsilLinkDetailsAction
ALT_WSIL_LINK_DETAILS=Detalles de enlace WSIL

# ListWSDLServicesAction
ALT_LIST_WSDL_SERVICES=Listar todos los servicios WSDL
FORM_LABEL_LIST_WSDL_SERVICES_DESC=Seleccione un conjunto de servicios WSDL y pulse <strong>A\u00f1adir a favoritos</strong> para a\u00f1adirlos a la lista de favoritos.

# ListUDDIServicesAction
ALT_LIST_UDDI_SERVICES=Listar todos los servicios UDDI
FORM_LABEL_LIST_UDDI_SERVICES_DESC=Seleccione un conjunto de servicios UDDI y pulse <strong>A\u00f1adir a favoritos</strong> para a\u00f1adirlos a la lista de favoritos. Pulse <strong>A\u00f1adir a p\u00e1gina UDDI</strong> para a\u00f1adir las selecciones a la P\u00e1gina UDDI. Pulse <strong>Renovar</strong> para renovar las selecciones.

# ListUDDIBusinessesAction
ALT_LIST_UDDI_LINKS=Listar todas las empresas UDDI
FORM_LABEL_LIST_UDDI_BUSINESSES_DESC=Seleccione un conjunto de empresas UDDI y pulse <strong>A\u00f1adir a favoritos</strong> para a\u00f1adirlas a la lista de favoritos. Pulse <strong>A\u00f1adir a p\u00e1gina UDDI</strong> para a\u00f1adirlas a la P\u00e1gina UDDI. Pulse <strong>Renovar</strong> para renovar las selecciones.

# ListWSILLinksAction
ALT_LIST_WSIL_LINKS=Listar todos los enlaces WSIL
FORM_LABEL_LIST_WSIL_LINKS=Seleccione un conjunto de enlaces WSIL y pulse <strong>A\u00f1adir a navegador</strong> para abrirlos en el navegador.

# ClearWSILAction
ALT_CLEAR_WSIL=Borrar WSIL

# RefreshAction
ALT_REFRESH_WSIL=Renovar WSIL
ALT_REFRESH_UDDI_BUSINESS=Renovar empresa UDDI
ALT_REFRESH_UDDI_SERVICE=Renovar servicio UDDI
MSG_ERROR_WSIL_NOT_FOUND=IWAB0333E No se ha podido cargar WSIL %1.
MSG_ERROR_BUSINESS_NOT_FOUND=IWAB0334E La empresa %1 no se ha podido encontrar en el registro.
MSG_ERROR_SERVICE_NOT_FOUND=IWAB0335E El servicio %1 no se ha podido encontrar en el registro.
MSG_INFO_REFRESH_SUCCESSFUL=IWAB0336I %1 se ha renovado.
MSG_CONFIRM_REMOVE_NODE=%1 ya no puede resolverse.  \u00bfDesea borrarlo?

# AddToUDDIPerspectiveAction
ALT_ADD_BUSINESS_TO_UDDI_PERSPECTIVE=A\u00f1adir empresa a p\u00e1gina UDDI
ALT_ADD_SERVICE_TO_UDDI_PERSPECTIVE=A\u00f1adir servicio a p\u00e1gina UDDI
MSG_INFO_ADD_TO_UDDI_PERSPECTIVE_SUCCESSFUL=IWAB0337I %1 se a\u00f1ade a la p\u00e1gina UDDI.
MSG_ERROR_ADD_TO_UDDI_PERSPECTIVE=IWAB0338E No se puede a\u00f1adir %1 a la p\u00e1gina UDDI.
MSG_ERROR_BUSINESS_NOT_FOUND=IWAB0339E La empresa %1 no se ha podido encontrar en el registro.
MSG_ERROR_SERVICE_NOT_FOUND=IWAB0340E El servicio %1 no se ha podido encontrar en el registro.

# WsilAddToWSDLPerspectiveAction
ALT_ADD_WSDL_TO_WSDL_PERSPECTIVE=A\u00f1adir WSDL a p\u00e1gina WSDL
MSG_INFO_ADD_WSDL_TO_WSDL_PERSPECTIVE_SUCCESSFUL=IWAB0395I %1 se a\u00f1ade a la p\u00e1gina WSDL.
MSG_ERROR_ADD_WSDL_TO_WSDL_PERSPECTIVE=IWAB0396E %1 no se ha podido cargar.

# AddWSILToFavoritesAction
ALT_ADD_WSIL_TO_FAVORITES=A\u00f1adir WSIL a favoritos
MSG_ERROR_ADD_TO_FAVORITES=IWAB0341E No se puede a\u00f1adir %1 a los favoritos.
MSG_ERROR_FAVORITES_ALREADY_EXISTS=IWAB0342E %1 ya existe en los favoritos.
MSG_INFO_ADD_TO_FAVORITES_SUCCESSFUL=IWAB0343I %1 se a\u00f1ade a los favoritos.
MSG_QUESTION_OVERWRITE_FAVORITES=El favorito ya existe.  \u00bfDesea sobrescribirlo?

# AddWSDLServiceToFavoritesAction
ALT_ADD_WSDL_SERVICE_TO_FAVORITES=A\u00f1adir WSDL a favoritos

# AddBusinessToFavoritesAction
ALT_ADD_UDDI_BUSINESS_TO_FAVORITES=A\u00f1adir empresa UDDI a favoritos

# AddServiceToFavoritesAction
ALT_ADD_SERVICE_TO_FAVORITES=A\u00f1adir servicio UDDI a favoritos

# WSILImportWSILToWorkbench
ATL_IMPORT_WSIL_TO_WORKBENCH=Importar WSIL al entorno de trabajo
FORM_LABEL_IMPORT_WSIL_TO_WORKBENCH_DESC=Seleccione un proyecto en el que guardar el archivo WSIL. Tambi\u00e9n puede cambiar el nombre del archivo WSIL.

# ImportToFileSystemAction
ALT_WSIL_IMPORT_TO_FS=Importar WSIL al sistema de archivos
ALT_WSDL_IMPORT_TO_FS=Importar WSDL al sistema de archivos

# 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_CONTENT=Contenido de propiedades
FRAME_TITLE_PROPERTIES_TOOLBAR=Barra de herramientas de propiedades
FRAME_TITLE_STATUS_CONTAINER=Contenedor de estado
FRAME_TITLE_STATUS_CONTENT=Contenido de estado
FRAME_TITLE_STATUS_TOOLBAR=Barra de herramientas de estado

# Form titles
FORM_TITLE_OPEN_WSIL=Abrir formulario WSIL
FORM_TITLE_UDDI_BUSINESS_DETAILS=Formulario de detalles de empresa UDDI
FORM_TITLE_UDDI_SERVICE_DETAILS=Formulario de detalles de servicio UDDI
FORM_TITLE_WSDL_SERVICE_DETAILS=Formulario Detalles de servicio WSDL
FORM_TITLE_WSIL_DETAILS=Formulario de detalles de WSIL
FORM_TITLE_WSIL_LINK_DETAILS=Formulario de detalles de enlace de WSIL

# View titles
VIEW_TITLE_UDDI_BUSINESSES=Vista de empresas UDDI
VIEW_TITLE_UDDI_SERVICES=Vista de servicios UDDI
VIEW_TITLE_WSDL_SERVICES=Vista de servicios WSDL
VIEW_TITLE_WSIL_LINKS=Vista de enlaces WSIL
