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

# 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_TOOLBAR=Barra degli strumenti propriet\u00e0
FRAME_TITLE_PROPERTIES_CONTENT=Contenuto propriet\u00e0
FRAME_TITLE_STATUS_CONTAINER=Contenitore stato
FRAME_TITLE_STATUS_TOOLBAR=Barra degli strumenti stato
FRAME_TITLE_STATUS_CONTENT=Contenuto stato
FRAME_TITLE_WSDL_PERSPECTIVE_CONTENT=Contenuto della pagina WSDL
FRAME_TITLE_XSD_INFORMATION_TOOLBAR=Barra degli strumenti della finestra di dialogo relativa alle informazioni su XSD
FRAME_TITLE_XSD_INFORMATION_CONTENT=Contenuto della finestra di dialogo relativa alle informazioni su XSD

# OpenWSDLAction
ALT_OPEN_WSDL=Apri WSDL
MSG_ERROR_INVALID_WSDL_URL=IWAB0378E Immettere un URL WSDL valido.
MSG_ERROR_OPEN_WSDL=IWAB0379E Impossibile aprire %1.
MSG_ERROR_XSD_VALIDATION=IWAB0380E Sono stati rilevati degli errori durante la convalida degli schemi XML.
MSG_INFO_OPEN_WSDL_SUCCESSFUL=IWAB0381I %1 \u00e8 stato aperto correttamente.

# WSDL Element details
ALT_WSDL_DETAILS=Dettagli WSDL
FORM_LABEL_WSDL_DETAILS_DESC=In basso sono visualizzati i dettagli relativi a questo documento WSDL. Fare clic su un servizio o su un binding per visualizzare i relativi dettagli.

# WSDL Service Element details
ALT_WSDL_SERVICE_DETAILS=Dettagli servizio WSDL
FORM_LABEL_SERVICE_DETAILS_DESC=In basso sono visualizzati i dettagli relativi a questo elemento &lt;servizio&gt;. Fare clic su un binding per visualizzare le relative operazioni.

# WSDL Binding Element details
ALT_WSDL_BINDING_DETAILS=Dettagli binding WSDL
FORM_LABEL_BINDING_DETAILS_DESC=In basso sono visualizzati i dettagli relativi a questo elemento <strong>%1</strong> &lt;binding&gt;. Fare clic su un'operazione per inserire i parametri e richiamare l'operazione o per specificare endpoint supplementari.

# InvokeWSDLOperationAction
ALT_INVOKE_WSDL_OPERATION=Richiama un'operazione WSDL
MSG_ERROR_UNABLE_TO_CONNECT=IWAB0382E Impossibile connettersi a %1
MSG_ERROR_VALIDATING_PARAMETER=IWAB0383E Errore durante la convalida di %1

# WSDLAddToFavoritesAction
ALT_ADD_WSDL_TO_FAVORITES=Aggiungi WSDL ai preferiti
MSG_ERROR_FAVORITES_ALREADY_EXISTS=IWAB0384E %1 esiste gi\u00e0 nei preferiti.
MSG_ERROR_ADD_TO_FAVORITES=IWAB0385E Impossibile aggiungere %1 ai preferiti.
MSG_INFO_ADD_TO_FAVORITES_SUCCESSFUL=IWAB0386I %1 viene aggiunto ai preferiti.
MSG_QUESTION_OVERWRITE_FAVORITES=I preferiti esistono gi\u00e0.  Sovrascriverli?

# RefreshWSDLAction
MSG_INFO_REFRESH_WSDL_SUCCESSFUL=IWAB0387I %1 viene aggiornato.
MSG_QUESTION_REMOVE_WSDL_NODE=%1 non \u00e8 pi\u00f9 risolvibile.  Cancellarlo?

# UpdateWSDLBindingAction
MSG_INFO_UPDATE_WSDL_BINDING_SUCCESSFUL=IWAB0388I Gli endpoint sono stati aggiornati correttamente.

# Form titles
FORM_TITLE_OPEN_WSDL=Apri modulo WSDL
FORM_TITLE_WSDL_DETAILS=Modulo dettagli WSDL
FORM_TITLE_WSDL_SERVICE_DETAILS=Modulo dettagli servizio WSDL
FORM_TITLE_WSDL_BINDING_DETAILS=Modulo dettagli binding WSDL
FORM_TITLE_INVOKE_WSDL_OPERATION=Modulo operazione WSDL

# Form Labels
FORM_LABEL_OPEN_WSDL_DESC=Immettere l'URL di un documento WSDL e fare clic su <strong>Vai</strong> per l'esplorazione.
FORM_LABEL_SERVICES=Servizi
FORM_LABEL_BINDINGS=Binding
FORM_LABEL_OPERATIONS=Operazioni
FORM_LABEL_BINDING_TYPE=Tipo
FORM_LABEL_BINDING_TYPE_UNSUPPORTED=Non supportato
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=Nome
FORM_LABEL_DOCUMENTATION=Documentazione
FORM_LABEL_ENDPOINT=Endpoint
FORM_LABEL_INVOKE_WSDL_OPERATION_DESC=Immettere i parametri di questa operazione WSDL e fare clic su <strong>Vai</Strong> per richiamare l'operazione.
FORM_LINK_ADD=Aggiungi
FORM_LINK_REMOVE=Rimuovi
FORM_LABEL_VALUES=Valori
FORM_LABEL_ENABLE_DISABLE_GROUP=Abilita/Disabilita gruppo
FORM_LABEL_UNION_TYPE=Tipi di unione
FORM_LABEL_LANGUAGE=Lingua
FORM_LABEL_XSD_APPLICATION_INFORMATION=Informazioni sull'applicazione
FORM_LABEL_XSD_DOCUMENTATION=Documentazione
FORM_LABEL_SOAP_REQUEST_ENVELOPE=Involucro richiesta SOAP:
FORM_LABEL_SOAP_RESPONSE_ENVELOPE=Involucro risposta SOAP:
FORM_LABEL_GROUP_ALL_ORDERING_MOVE_UP=Sposta elemento su
FORM_LABEL_GROUP_ALL_ORDERING_MOVE_DOWN=Sposta elemento gi\u00f9
FORM_LABEL_BASE_TYPE=Tipo base
FORM_LABEL_UNBOUNDED=Non collegato
FORM_LABEL_LENGTH=Lunghezza
FORM_LABEL_LENGTH_VALUE=[%1..%2]
FORM_LABEL_PATTERN=Modello
FORM_LABEL_WHITESPACE=Spazio bianco
FORM_LABEL_RANGE_OF_VALUES=Intervallo di valori
FORM_LABEL_MIN_EXCLUSIVE=(%1..
FORM_LABEL_MIN_INCLUSIVE=[%1..
FORM_LABEL_MAX_EXCLUSIVE=%1)
FORM_LABEL_MAX_INCLUSIVE=%1]
FORM_LABEL_TOTAL_DIGITS=Cifre totali
FORM_LABEL_FRACTION_DIGITS=Cifre frazione
FORM_LABEL_OCCURANCE=Ricorrenza di
FORM_LABEL_UNION_MEMBERS=Membri unione
FORM_LABEL_LIST_ITEMS=Elementi elenco
FORM_LABEL_ELEMENTS=Elementi
FORM_LABEL_SOAP_ENC_ARRAYS=Matrici SOAP
FORM_LABEL_CONTENT=Contenuto
FORM_LABEL_ATOMIC_NAME_TYPE=%1 (%2):
FORM_LABEL_NULL=null
FORM_LABEL_GROUP_NUMBER=Gruppo %1
FORM_LABEL_CHOICES=Scelte
FORM_LABEL_NOTHING_TO_DISPLAY_IN_FORM_VIEW=Non esiste alcun elemento da visualizzare nella vista del modulo.  Passare alla vista di origine per la richiesta e la risposta  SOAP.
FORM_LABEL_SOAP_RESPONSE_FAILED_VALIDATION_IN_FORM_VIEW=La risposta SOAP non \u00e8 riuscita ad eseguire la convalida dello schema.  Passare alla vista di origine per la risposta SOAP in formato XML.
FORM_LABEL_END_POINTS=Endpoint

# Source/Form views
FORM_LINK_FORM=Modulo
ALT_SWITCH_TO_FORM_VIEW=Passa alla vista del modulo
FORM_LINK_SOURCE=Origine
ALT_SWITCH_TO_SOURCE_VIEW=Passa alla vista di origine
FORM_LABEL_FRAGMENT_SOAP_VIEW_CONTENT=Corpo Soap:
BUTTON_LABEL_LOAD=Carica
BUTTON_LABEL_SAVE_AS=Salva con nome...
MSG_QUESTION_SYNC_VIEWS=Il formato del contenuto di origine pu\u00f2 essere alterato come risultato del passaggio alla vista del modulo.  Continuare?
MSG_QUESTION_SYNC_VIEWS_DESPITE_INVALID_SOURCE_CONTENT=Il contenuto della vista di origine non \u00e8 riuscito ad eseguire la convalida dello schema.  Eseguire ugualmente la sincronizzazione?  (Il contenuto della vista di origine pu\u00f2 essere modificato)

# Form control titles
FORM_CONTROL_TITLE_ENABLE_DISABLE_GROUP=Abilita/Disabilita gruppo
FORM_CONTROL_TITLE_SELECT_ELEMENT_IN_GROUP=Seleziona elemento in gruppo
FORM_CONTROL_TITLE_SELECT_UNION_TYPE=Seleziona tipo di unione
FORM_CONTROL_TITLE_SOAP_FILE=File di dati SOAP

# XSD Information Dialog
TITLE_XSD_INFORMATION_DIALOG=Finestra di dialogo sulle informazioni XSD

# Error messages
MSG_ERROR_NOTHING_SELECTED=IWAB0389E Selezionare almeno un elemento.
MSG_ERROR_MAX_OCCURS_VIOLATION=IWAB0390E Viene raggiunta la ricorrenza massima.
MSG_ERROR_MIN_OCCURS_VIOLATION=IWAB0391E Viene raggiunta la ricorrenza minima.
MSG_ERROR_CANNOT_MOVE_FIRST_ELEMENT_UP=IWAB0392E L'elemento selezionato \u00e8 gi\u00e0 il primo del gruppo.
MSG_ERROR_CANNOT_MOVE_LAST_ELEMENT_DOWN=IWAB0393E L'elemento selezionato \u00e8 gi\u00e0 l'ultimo del gruppo.
