###############################################################################
# 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 principale

# Forms
FORM_LABEL_URL=URL
FORM_LABEL_ITEM_NUMBER=Elemento n.
FORM_LABEL_UDDI_BUSINESS_NAME=Nome business UDDI
FORM_LABEL_UDDI_SERVICE_NAME=Nome servizio UDDI
FORM_LABEL_LANGUAGE=Lingua
FORM_LABEL_ABSTRACT=Astratta
FORM_LABEL_NAME=Nome
FORM_LABEL_WSDL_BINDINGS=Binding WSDL
FORM_LABEL_NAMESPACE_URI=URI spazio dei nomi
FORM_LABEL_LOCAL_NAME=Nome locale
FORM_LABEL_INQUIRY_API=API di richiesta
FORM_LABEL_SERVICE_KEY=Chiave servizio
FORM_LABEL_BUSINESS_KEY=Chiave business
FORM_LABEL_DISCOVERY_URL=URL di rilevamento
FORM_LABEL_WSIL=Dettagli WSIL
FORM_LABEL_WSIL_LINKS=Collegamenti WSIL
FORM_LABEL_WSDL_SERVICE=Servizi WSDL
FORM_LABEL_UDDI_SERVICE=Servizi UDDI
FORM_LABEL_UDDI_BUSINESS=Business UDDI
FORM_LABEL_ADD_TO_NAVIGATOR=Aggiungi alla pagina Selezione
FORM_LABEL_ADD_TO_FAVORITES=Aggiungi alla pagina Preferiti
FORM_LABEL_ADD_TO_UDDI_PERSPECTIVE=Aggiungi alla pagina UDDI
FORM_LABEL_ADD_TO_WSDL_PERSPECTIVE=Aggiungi alla pagina WSDL
FORM_LABEL_REFRESH=Aggiorna
FORM_LABEL_NA=N/D
FORM_LABEL_UNAVAILABLE_UDDI_SERVICE=Servizio non disponibile:
FORM_LABEL_UNAVAILABLE_UDDI_BUSINESS=Business non disponibile:
FORM_LABEL_CHOOSE_WSIL_INSPECTION_TYPE=Scegliere il tipo di oggetti da esaminare:
MSG_ERROR_NOTHING_SELECTED=IWAB0328E Selezionare almeno un elemento.

# OpenWSILAction
ALT_OPEN_WSIL=Apri WSIL
FORM_LABEL_OPEN_WSIL_DESC=Immettere l'URL di un documento WSIL o di un documento HTML e fare clic su <strong>Vai</strong> per iniziare l'esame.
WSIL_URL=URL per il documento:
MSG_ERROR_INVALID_WSIL_URL=IWAB0394E %1 non \u00e8 un URL WSIL o un URL HTML valido.
MSG_ERROR_WSIL_ALREADY_OPENED=IWAB0329E %1 \u00e8 gi\u00e0 aperto nella pagina di selezione.
MSG_INFO_OPEN_WSIL_SUCCESSFUL=IWAB0330I %1 \u00e8 stato aperto correttamente.

# OpenWSILLinkAction
ALT_OPEN_WSIL_LINK=Apri collegamento WSIL
MSG_ERROR_WSIL_LINK_ALREADY_OPENED=IWAB0331E %1 \u00e8 gi\u00e0 aperto nella pagina di selezione.
MSG_INFO_OPEN_WSIL_LINK_SUCCESSFUL=IWAB0332I %1 \u00e8 stato aperto correttamente.

# WsilDetailsAction
ALT_WSIL_DETAILS=Dettagli WSIL

# WsilServiceDetailsAction
ALT_WSIL_SERVICE_DETAILS=Dettagli servizio WSIL

# UddiLinkDetailsAction
ALT_UDDI_LINK_DETAILS=Dettagli business UDDI

# WsilLinkDetailsAction
ALT_WSIL_LINK_DETAILS=Dettagli collegamento WSIL

# ListWSDLServicesAction
ALT_LIST_WSDL_SERVICES=Visualizza tutti i servizi WSDL
FORM_LABEL_LIST_WSDL_SERVICES_DESC=Selezionare un insieme di servizi WSDL e fare clic su <strong>Aaggiungi a preferiti</strong> per aggiungere i servizi all'elenco di preferiti.

# ListUDDIServicesAction
ALT_LIST_UDDI_SERVICES=Visualizza tutti i servizi UDDI
FORM_LABEL_LIST_UDDI_SERVICES_DESC=Selezionare un insieme di servizi UDDI e fare clic su <strong>Aaggiungi a preferiti</strong> per aggiungere i servizi all'elenco di preferiti. Fare clic su <strong>Aggiungi alla pagina UDDI</strong> per aggiungere le selezioni alla pagina UDDI. Fare clic su <strong>Aggiorna</strong> per aggiornare le selezioni.

# ListUDDIBusinessesAction
ALT_LIST_UDDI_LINKS=Visualizza tutti i business UDDI
FORM_LABEL_LIST_UDDI_BUSINESSES_DESC=Selezionare un insieme di business UDDI e fare clic su <strong>Aaggiungi a preferiti</strong> per aggiungere i business all'elenco di preferiti. Fare clic su <strong>Aggiungi alla pagina UDDI</strong> per aggiungere i business alla pagina UDDI. Fare clic su <strong>Aggiorna</strong> per aggiornare le selezioni.

# ListWSILLinksAction
ALT_LIST_WSIL_LINKS=Visualizza tutti i collegamenti WSIL
FORM_LABEL_LIST_WSIL_LINKS=Selezionare un insieme di collegamenti WSIL e premere <strong>Aggiungi alla pagina Selezione</strong> per aprire i collegamenti nella pagina di  selezione.

# ClearWSILAction
ALT_CLEAR_WSIL=Cancella WSIL

# RefreshAction
ALT_REFRESH_WSIL=Aggiorna WSIL
ALT_REFRESH_UDDI_BUSINESS=Aggiorna business UDDI
ALT_REFRESH_UDDI_SERVICE=Aggiorna servizio UDDI
MSG_ERROR_WSIL_NOT_FOUND=IWAB0333E \u00c8 possibile che WSIL %1 non sia stato caricato.
MSG_ERROR_BUSINESS_NOT_FOUND=IWAB0334E \u00c8 possibile che il business %1 non sia stato trovato nel registro.
MSG_ERROR_SERVICE_NOT_FOUND=IWAB0335E \u00c8 possibile che il servizio %1 non sia stato trovato nel registro.
MSG_INFO_REFRESH_SUCCESSFUL=IWAB0336I %1 viene aggiornato.
MSG_CONFIRM_REMOVE_NODE=%1 non \u00e8 pi\u00f9 risolvibile.  Cancellarlo?

# AddToUDDIPerspectiveAction
ALT_ADD_BUSINESS_TO_UDDI_PERSPECTIVE=Aggiungi business alla pagina UDDI
ALT_ADD_SERVICE_TO_UDDI_PERSPECTIVE=Aggiungi servizio alla pagina UDDI
MSG_INFO_ADD_TO_UDDI_PERSPECTIVE_SUCCESSFUL=IWAB0337I %1 viene aggiunto alla pagina UDDI.
MSG_ERROR_ADD_TO_UDDI_PERSPECTIVE=IWAB0338E Impossibile aggiungere %1 alla pagina UDDI.
MSG_ERROR_BUSINESS_NOT_FOUND=IWAB0339E \u00c8 possibile che il business %1 non sia stato trovato nel registro.
MSG_ERROR_SERVICE_NOT_FOUND=IWAB0340E \u00c8 possibile che il servizio %1 non sia stato trovato nel registro.

# WsilAddToWSDLPerspectiveAction
ALT_ADD_WSDL_TO_WSDL_PERSPECTIVE=Aggiungi WSDL alla pagina WSDL
MSG_INFO_ADD_WSDL_TO_WSDL_PERSPECTIVE_SUCCESSFUL=IWAB0395I %1 viene aggiunto alla pagina WSDL.
MSG_ERROR_ADD_WSDL_TO_WSDL_PERSPECTIVE=IWAB0396E \u00c8 possibile che %1 non sia stato caricato.

# AddWSILToFavoritesAction
ALT_ADD_WSIL_TO_FAVORITES=Aggiungi WSIL ai preferiti
MSG_ERROR_ADD_TO_FAVORITES=IWAB0341E Impossibile aggiungere %1 ai preferiti.
MSG_ERROR_FAVORITES_ALREADY_EXISTS=IWAB0342E %1 esiste gi\u00e0 nei preferiti.
MSG_INFO_ADD_TO_FAVORITES_SUCCESSFUL=IWAB0343I %1 viene aggiunto ai preferiti.
MSG_QUESTION_OVERWRITE_FAVORITES=I preferiti esistono gi\u00e0.  Sovrascriverli?

# AddWSDLServiceToFavoritesAction
ALT_ADD_WSDL_SERVICE_TO_FAVORITES=Aggiungi WSDL ai preferiti

# AddBusinessToFavoritesAction
ALT_ADD_UDDI_BUSINESS_TO_FAVORITES=Aggiungi business UDDI ai preferiti

# AddServiceToFavoritesAction
ALT_ADD_SERVICE_TO_FAVORITES=Aggiungi servizio UDDI ai preferiti

# WSILImportWSILToWorkbench
ATL_IMPORT_WSIL_TO_WORKBENCH=Importa WSIL nel workbench
FORM_LABEL_IMPORT_WSIL_TO_WORKBENCH_DESC=Selezionare un progetto del workbench in cui salvare il file WSDL. \u00c8 possibile anche modificare il nome del file WSIL.

# ImportToFileSystemAction
ALT_WSIL_IMPORT_TO_FS=Importa WSIL nel filesystem
ALT_WSDL_IMPORT_TO_FS=Importa WSDL nel filesystem

# Frame titles
FRAME_TITLE_NAVIGATOR_CONTAINER=Contenitore Selezione
FRAME_TITLE_NAVIGATOR_TOOLBAR=Barra degli strumenti Selezione
FRAME_TITLE_NAVIGATOR_CONTENT=Contenuto Selezione
FRAME_TITLE_ACTIONS_CONTAINER=Contenitore azioni
FRAME_TITLE_PROPERTIES_CONTAINER=Contenitore propriet\u00e0
FRAME_TITLE_PROPERTIES_CONTENT=Contenuto propriet\u00e0
FRAME_TITLE_PROPERTIES_TOOLBAR=Barra degli strumenti propriet\u00e0
FRAME_TITLE_STATUS_CONTAINER=Contenitore stato
FRAME_TITLE_STATUS_CONTENT=Contenuto stato
FRAME_TITLE_STATUS_TOOLBAR=Barra degli strumenti stato

# Form titles
FORM_TITLE_OPEN_WSIL=Apri modulo WSIL
FORM_TITLE_UDDI_BUSINESS_DETAILS=Modulo dettagli business UDDI
FORM_TITLE_UDDI_SERVICE_DETAILS=Modulo dettagli servizio UDDI
FORM_TITLE_WSDL_SERVICE_DETAILS=Modulo dettagli servizio WSDL
FORM_TITLE_WSIL_DETAILS=Modulo dettagli WSIL
FORM_TITLE_WSIL_LINK_DETAILS=Modulo dettagli collegamento WSIL

# View titles
VIEW_TITLE_UDDI_BUSINESSES=Vista Business UDDI
VIEW_TITLE_UDDI_SERVICES=Vista Servizi UDDI
VIEW_TITLE_WSDL_SERVICES=Vista Servizi WSDL
VIEW_TITLE_WSIL_LINKS=Vista Collegamenti WSIL
