###############################################################################
# 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=Esplora servizi Web

# Tree Nodes
ALT_OPEN=Apri
ALT_CLOSE=Chiudi

# Perspective Toolbar
ALT_BACK=Indietro
ALT_FORWARD=Avanti
ALT_ACTION_ENGINE=Registratore azioni
ALT_UDDI_PERSPECTIVE=Pagina UDDI
ALT_WSIL_PERSPECTIVE=Pagina WSIL
ALT_WSDL_PERSPECTIVE=Pagina WSDL
ALT_FAVORITES_PERSPECTIVE=Preferiti

# Toolbars
ALT_DOUBLE_CLICK_TO_MAXIMIZE=Fare doppio clic per ingrandire
ALT_DOUBLE_CLICK_TO_RESTORE=Fare doppio clic per ripristinare

# SetDefaultViewTool
ALT_BACK_TO_TOP=Torna all'inizio

# Common Actions
ALT_REFRESH=Aggiorna
ALT_CLEAR=Cancella
ALT_RESULTS=Risultati

# Common Labels
ALT_NAVIGATOR=Selezione
ALT_ACTIONS=Azioni
ALT_STATUS=Stato
ALT_OTHER_ACTIONS=Altre azioni
FORM_BUTTON_GO=&nbsp;&nbsp;Vai&nbsp;&nbsp;
FORM_BUTTON_RESET=Reimposta
FORM_BUTTON_CANCEL=Annulla
FORM_LABEL_ACTIONS=Azioni
FORM_LABEL_ACTIONS_NONE=Nessuna

# Placeholder for blank table entries
TABLE_BLANK_PLACEHOLDER=--

# Common Form Control Titles
FORM_CONTROL_TITLE_SELECT_ALL_CHECK_BOX=Seleziona tutto
FORM_CONTROL_TITLE_SELECT_ROW_CHECK_BOX=Seleziona riga

# Common Messages
MSG_ERROR_UNEXPECTED=IWAB0135E Si \u00e8 verificato un errore imprevisto.
MSG_ERROR_NO_ACTION_SELECTED=IWAB0124E Selezionare un'azione.
MSG_ERROR_NO_NODE_SELECTED=IWAB0125E Selezionare un nodo.
MSG_SUBMIT_IN_PROGRESS=Attendere. L'operazione \u00e8 ancora in corso.
MSG_LOAD_IN_PROGRESS=Attendere il caricamento del modulo...

#LaunchWebServiceWizardAction
ALT_LAUNCH_WEB_SERVICE_WIZARD=Avvio procedura guidata servizi Web
FORM_LABEL_CHOOSE_WIZARD=Selezionare una procedura guidata da avviare:
FORM_RADIO_WEB_SERVICE_CLIENT_WIZARD=Client di servizi Web
FORM_RADIO_WEB_SERVICE_SKELETON_WIZARD=Struttura del servizio Web
MSG_ERROR_WIZARD_ALREADY_RUNNING=IWAB0126E Una procedura guidata dei servizi Web \u00e8 gi\u00e0 in esecuzione.  Completare la procedura guidata esistente prima di avviare una nuova procedura.
MSG_ERROR_WSDL_URL_IS_UNREACHABLE=IWAB0127E Il documento WSDL non \u00e8 raggiungibile.

# ImportToFileSystemAction
ALT_WSIL_IMPORT_TO_FS=Importa WSIL nel filesystem
ALT_WSDL_IMPORT_TO_FS=Importa WSDL nel filesystem
MSG_ERROR_RETRIEVING_WSDL_DOC=IWAB0128E Impossibile richiamare il documento WSDL.
MSG_ERROR_RETRIEVING_WSIL_DOC=IWAB0129E Impossibile richiamare il documento WSIL.
MSG_IMPORT_WSDL_SUCCESSFUL=Documento WSDL importato correttamente.
MSG_IMPORT_WSIL_SUCCESSFUL=Documento WSIL importato correttamente.

# ImportToWorkbenchAction
ALT_IMPORT_WSDL_TO_WORKBENCH=Importa WSDL nel workbench
FORM_LABEL_IMPORT_TO_WORKBENCH_DESC=Selezionare un progetto del workbench in cui salvare il file WSDL. \u00c8 possibile anche modificare il nome del file WSDL.
WEB_PROJECT_NAME=Progetto Web:
WORKBENCH_PROJECT_NAME=Progetto workbench:
LABEL_IMPORT_WSDL=Importa documento WSDL
LABEL_IMPORT_TO_WSIL=Importa come un riferimento di servizio in un documento WSIL
IMPORTED_WSDL_FILE_NAME=Nome file WSDL:
WSIL_FILE_NAME=Nome file WSIL:
MSG_ERROR_FILE_OVERWRITE_DISABLED=Impossibile creare il file "%2" relativo al percorso "%1". Non \u00e8 stata abilitata la sovrascrittura automatica dei file. Si desidera attivarla per questo file?
MSG_ERROR_INVALID_WORKBENCH_PROJECT=IWAB0130E Selezionare un progetto del workbench.
MSG_ERROR_INVALID_WSDL_FILE_NAME=IWAB0131E Nome file non valido.
MSG_ERROR_INVALID_WSIL_FILE_NAME=IWAB0470E Nome file WSIL non valido.
MSG_ERROR_NO_IMPORT_OPTION_SELECTED=IWAB0471E Nessuna opzione di importazione selezionata.  Scegliere almeno un'opzione di importazione.
MSG_ERROR_WRITING_TEMP_FILE_TO_FS=IWAB0132E Impossibile scrivere il file temporaneo.
MSG_INFO_IMPORT_TO_WORKBENCH_SUCCESSFUL=IWAB0314I %1 \u00e8 stato importato correttamente nel workbench.
MSG_INFO_IMPORT_SERVICE_REF_TO_WSIL_SUCCESSFUL=IWAB0472I Il riferimento di servizio \u00e8 stato importato correttamente in %1.

# CheckWorkbenchFileReadOnlyAction
MSG_ERROR_FILE_CHECKOUT_DISABLED=Impossibile creare il file "%2" relativo al percorso "%1". Non \u00e8 stata abilitata l'estrazione automatica dei file. Si desidera attivarla per questo file?

# ClearNodeAction
MSG_INFO_NODE_CLEARED=IWAB0133I %1 cancellato.

# Table twistees
ALT_TWIST_OPENED=Nascondi
ALT_TWIST_CLOSED=Espandi

# WSDL Browser
FORM_LINK_BROWSE=Sfoglia...
TITLE_WSDL_BROWSER=Browser WSDL - %1
FORM_LABEL_WSDL_SOURCE=Selezionare un'origine WSDL:
FORM_LABEL_WSDL_SOURCE_WEBPROJECTS=Progetti Web
FORM_LABEL_WSDL_SOURCE_FAVORITES=Preferiti
FORM_LABEL_WEB_PROJECT=Progetto Web
FORM_LABEL_WSDL_URL=URL WSDL
FORM_BUTTON_REFRESH=Aggiorna
ALT_WSDL_BROWSER=Browser WSDL
WSDL_TYPE_SERVICE_INTERFACES=Interfacce di servizio
WSDL_TYPE_SERVICES=Servizi

# Calendar Browser
TITLE_CALENDAR_BROWSER=Browser 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=Me
FORM_LABEL_SH_THURSDAY=Gi
FORM_LABEL_SH_FRIDAY=Ve
FORM_LABEL_SH_SATURDAY=Sa
# Months of the year
FORM_LABEL_MONTH=Mese:
FORM_LABEL_JANUARY=Gennaio
FORM_LABEL_FEBRUARY=Febbraio
FORM_LABEL_MARCH=Marzo
FORM_LABEL_APRIL=Aprile
FORM_LABEL_MAY=Maggio
FORM_LABEL_JUNE=Giugno
FORM_LABEL_JULY=Luglio
FORM_LABEL_AUGUST=Agosto
FORM_LABEL_SEPTEMBER=Settembre
FORM_LABEL_OCTOBER=Ottobre
FORM_LABEL_NOVEMBER=Novembre
FORM_LABEL_DECEMBER=Dicembre
FORM_LABEL_YEAR=Anno:
FORM_LABEL_TIME=Ora:
FORM_LINK_TODAY=Oggi
FORM_LINK_PREVIOUS_YEAR=<<
FORM_LINK_PREVIOUS_MONTH=<
FORM_LINK_NEXT_MONTH=>
FORM_LINK_NEXT_YEAR=>>
ALT_PREVIOUS_YEAR=Anno precedente
ALT_PREVIOUS_MONTH=Mese precedente
ALT_NEXT_MONTH=Mese successivo
ALT_NEXT_YEAR=Anno successivo
ALT_TODAY=Oggi
ALT_CALENDAR_BROWSER=Browser calendario
MSG_ERROR_INVALID_TIME_FORMAT=IWAB0368E L'orario non \u00e8 formattato come HH:MM:SS[.SSS]. Utilizzare l'orario corrente?

# Action engine
TITLE_ACTION_RECORDER=Registratore azioni
FORM_LABEL_MODE=Modalit\u00e0:
FORM_LABEL_MODE_PLAY=Riproduci
FORM_LABEL_MODE_STOP=Termina
FORM_LABEL_MODE_RECORD=Registra
FORM_LABEL_SAVE=Salva
FORM_LABEL_PLAY_FILE=Riproduci file:
MSG_ERROR_INVALID_PLAY_FILE=IWAB0362E Specificare un file da riprodurre.

# Frame titles
FRAME_TITLE_PERSPECTIVE_WORKAREA=Area di lavoro interna Esplora Servizi Web
FRAME_TITLE_PERSPECTIVE_TOOLBAR=Barra degli strumenti Esplora Servizi Web
FRAME_TITLE_PERSPECTIVE_CONTENT=Contenuto della pagina Esplora Servizi Web
FRAME_TITLE_WSDL_TOOLBAR=Barra degli strumenti del browser WSDL
FRAME_TITLE_WSDL_CONTENT=Contenuto del browser WSDL

# Form titles
FORM_TITLE_PAGE_LOADER=Caricatore pagina
FORM_TITLE_PAGE_CONTENT=Contenuto pagina caricata
FORM_TITLE_LAUNCH_WEBSERVICE_WIZARD=Avvio modulo procedura guidata servizi Web
FORM_TITLE_IMPORT_TO_WORKBENCH=Importazione nel modulo del workbench
