#
# Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.  Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#

orbd.usage=Uso: {0} <opzioni> \n\ndove <opzioni> include:\n  -port                  Porta di attivazione da cui avviare ORBD, valore predefinito 1049 (opzionale)\n  -defaultdb             Directory per i file ORBD, valore predefinito "./orb.db" (opzionale)\n  -serverid              ID server per ORBD, valore predefinito 1 (opzionale)\n  -ORBInitialPort        Porta iniziale (richiesta)\n  -ORBInitialHost       HostName iniziale (richiesto)\n

servertool.usage=Uso: {0} <opzioni> \n\ndove <opzioni> include:\n  -ORBInitialPort        Porta iniziale (richiesta)\n  -ORBInitialHost        HostName iniziale (richiesto)\n
servertool.banner=\n\nBenvenuti in Java IDL Server Tool     \nimmettere i comandi quando richiesto \n
servertool.shorthelp=\n\n\tComandi disponibili:\n\t-------------------- \n
servertool.baddef=Definizione server errata: {0}
servertool.nosuchserver=\timpossibile trovare il server indicato.
servertool.helddown=\til server \u00E8 mantenuto inattivo.
servertool.nosuchorb=\tORB non valido.
servertool.serverup=\til server \u00E8 gi\u00E0 attivo.
servertool.appname=\tapplicationName     - {0}
servertool.name=\tnome      - {0}
servertool.classpath=\tclasspath - {0}
servertool.args=\targom      - {0}
servertool.vmargs=\targomvm    - {0}
servertool.serverid=\tID server - {0}
servertool.servernotrunning=\til server non \u00E8 in funzione.
servertool.register=\n\n\tregister -server <nome classe server> \n\t         -applicationName <nome server alternativo> \n\t         -classpath <classpath per il server> \n\t         -args <argom per il server> \n\t         -vmargs <argom per la Java VM del server>\n
servertool.register1=registra un server attivabile
servertool.register2=\tserver registrato (idserver = {0}).
servertool.register3=\tserver registrato ma mantenuto inattivo (idserver = {0}).
servertool.register4=\tserver gi\u00E0 registrato (idserver = {0}).

servertool.unregister=\n\tunregister [ -serverid <id server> | -applicationName <nome> ] \n
servertool.unregister1=rimuovi un server registrato.
servertool.unregister2=\tserver rimosso dal registro.

servertool.locate=\n\tlocate [ -serverid <id server> | -applicationName <nome> ] [ <-endpointType <endpointType> ] \n
servertool.locate1=individua le porte di un tipo specifico per un server registrato
servertool.locate2=\n\n\tNome host {0} \n\n\t\tPorta\t\tTipo porta\t\tId ORB\n\t\t-----\t\t----------\t\t------\n
servertool.locateorb=\n\tlocateperorb [ -serverid <id server> | -applicationName <nome> ] [ -orbid <nome ORB> ]\n
servertool.locateorb1=individua le porte per un orb specifico di un server registrato
servertool.locateorb2=\n\n\tNome host {0} \n\n\t\tPorta\t\tPortType\t\tId ORB\n\t\t-----\t\t---------\t\t------\n
servertool.getserverid=\n\tgetserverid [ -applicationName <nome> ] \n
servertool.getserverid1=restituisce l'id server per un applicationName
servertool.getserverid2=\tL''ID server per applicationName {0} \u00E8 {1}

servertool.list=\n\tlista\n
servertool.list1=elenca tutti i server registrati
servertool.list2=\n\tID server\tNome classe server\t\tApplicazione server\n\t---------\t------------------\t\t-------------------\n
servertool.listactive=\n\tlistactive
servertool.listactive1=elenca i server attivi al momento
servertool.listappnames=\tlistappnames\n
servertool.listappnames1=elenca applicationNames definiti al momento
servertool.listappnames2=applicationNames del server definiti al momento:

servertool.shutdown=\n\tshutdown [ -serverid <id server> | -applicationName <nome> ]\n
servertool.shutdown1=arresta un server registrato
servertool.shutdown2=\tserver arrestato correttamente
servertool.startserver=\n\tstartup [ -serverid <id server> | -applicationName <nome> ]\n
servertool.startserver1=avvia un server registrato
servertool.startserver2=\tserver avviato correttamente.

servertool.quit=\n\tesci\n
servertool.quit1=esci dall'applicazione corrente

servertool.help=\thelp\n\tOR\n\thelp <nome comando>\n
servertool.help1=Guida

servertool.orbidmap=\tUso: orblist [ -serverid <id server> | -applicationName <nome> ]\n
servertool.orbidmap1=lista nomi orb e relativa mappatura
servertool.orbidmap2=\n\tId ORB\t\tNome ORB\n\t------\t\t--------\n
pnameserv.success=NameServer persistente avviato correttamente


bootstrap.usage=Uso: {0} <opzioni> \n\ndove <opzioni> include:\n  -ORBInitialPort        Porta iniziale (richiesta)\n  -InitialServicesFile   File contenente la lista dei servizi iniziali (richiesto)\n
bootstrap.success=impostazione porta su {0} e lettura servizi da {1} in corso
bootstrap.filenotreadable=il file {0} non \u00E8 leggibile
bootstrap.filenotfound=impossibile trovare il file {0}
bootstrap.exception=rilevata un''eccezione durante il salvataggio delle propriet\u00E0 nel file {0}: eccezione {1}

tnameserv.exception=rilevata un''eccezione durante l''avvio del servizio di bootstrap sulla porta {0}
tnameserv.usage=utilizzare un'altra porta con gli argomenti di riga di comando -ORBInitialPort <n.porta>
tnameserv.invalidhostoption=ORBInitialHost non \u00E8 un'opzione valida per NameService
tnameserv.orbinitialport0=ORBInitialPort 0 non \u00E8 un'opzione valida per NameService
tnameserv.hs1=Contesto di denominazione iniziale:\n{0}
tnameserv.hs2=TransientNameServer: impostazione della porta per i riferimenti degli oggetti iniziali a: {0}
tnameserv.hs3=Pronto.

orbd.commfailure=\nImpossibile avviare ORBD perch\u00E9 ORBinitialPort \u00E8 gi\u00E0 in uso
orbd.internalexception=\nImpossibile avviare ORBD a causa di un'eccezione interna. \neCause possibili: \n1. ORBInitialPort o ORBActivationPort specificato gi\u00E0 in uso \n2. Non esistono autorizzazioni per scrivere orb.db 

