#
# 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=Sintaxis: {0} <opciones> \n\ndonde <opciones> incluye:\n  -port                  Puerto de activaci\u00F3n en el que se debe iniciar el ORBD, por defecto es el 1049 (opcional)\n  -defaultdb             Directorio para los archivos de ORBD, por defecto es "./orb.db" (opcional)\n  -serverid              Identificador de servidor para ORBD, por defecto es 1 (opcional)\n  -ORBInitialPort        Puerto inicial (necesario)\n  -ORBInitialHost        Nombre de host inicial (necesario)\n

servertool.usage=Sintaxis: {0} <opciones> \n\ndonde <opciones> incluye:\n  -ORBInitialPort        Puerto inicial (necesario)\n  -ORBInitialHost        Nombre de host inicial (necesario)\n
servertool.banner=\n\nBienvenido a Java IDL Server Tool \nescriba los comandos en la petici\u00F3n de datos \n
servertool.shorthelp=\n\n\tComandos disponibles: \n\t------------------- \n
servertool.baddef=Definici\u00F3n de servidor incorrecta: {0}
servertool.nosuchserver=\tno se ha encontrado el servidor.
servertool.helddown=\tel servidor se mantiene desconectado.
servertool.nosuchorb=\tORB no v\u00E1lido.
servertool.serverup=\tel servidor ya est\u00E1 conectado.
servertool.appname=\tapplicationName     - {0}
servertool.name=\tname      - {0}
servertool.classpath=\tclasspath - {0}
servertool.args=\targs      - {0}
servertool.vmargs=\tvmargs    - {0}
servertool.serverid=\tserver id - {0}
servertool.servernotrunning=\tel servidor no se est\u00E1 ejecutando.
servertool.register=\n\n\tregister -server <nombre de clase de servidor> \n\t         -applicationName <nombre de servidor alternativo> \n\t         -classpath <classpath al servidor> \n\t         -args <argumentos para el servidor> \n\t         -vmargs <argumentos para la MV Java del servidor>\n
servertool.register1=registrar un servidor que se pueda activar
servertool.register2=\tservidor registrado (identificador de servidor = {0}).
servertool.register3=\tservidor registrado pero desconectado (identificador de servidor = {0}).
servertool.register4=\tservidor ya registrado (identificador de servidor = {0}).

servertool.unregister=\n\tunregister [ -serverid <identificador de servidor> | -applicationName <nombre> ] \n
servertool.unregister1=anular el registro de un servidor registrado
servertool.unregister2=\tanulado el registro del servidor.

servertool.locate=\n\tlocate [ -serverid <identificador de servidor> | -applicationName <nombre> ] [ <-endpointType <tipo de punto final> ] \n
servertool.locate1=localizar puertos de un tipo espec\u00EDfico para un servidor registrado
servertool.locate2=\n\n\tNombre de host {0} \n\n\t\tPuerto\t\tTipo de puerto\t\tIdentificador ORB\n\t\t----\t\t---------\t\t------\n
servertool.locateorb=\n\tlocateperorb [ -serverid <identificador de servidor> | -applicationName <nombre> ] [ -orbid <nombre de ORB> ]\n
servertool.locateorb1=localizar puertos para un ORB espec\u00EDfico del servidor registrado
servertool.locateorb2=\n\n\tNombre de host {0} \n\n\t\tPuerto\t\tTipo de puerto\t\tIdentificador de ORB\n\t\t----\t\t--------\t\t------\n
servertool.getserverid=\n\tgetserverid [ -applicationName <nombre> ] \n
servertool.getserverid1=devolver el identificador de servidor para un valor de applicationName
servertool.getserverid2=\tEl identificador de servidor para applicationName {0} es {1}

servertool.list=\n\tlist\n
servertool.list1=enumerar todos los servidores registrados
servertool.list2=\n\tIdentificador de servidor\tNombre de clase del servidor\t\tAplicaci\u00F3n de servidor\n\t-------------------------\t----------------------------\t\t----------------------\n
servertool.listactive=\n\tlistactive
servertool.listactive1=enumerar los servidores actualmente activos
servertool.listappnames=\tlistappnames\n
servertool.listappnames1=enumerar los nombres de aplicaci\u00F3n actualmente definidos
servertool.listappnames2=Nombres de aplicaci\u00F3n de servidor actualmente definidos:

servertool.shutdown=\n\tshutdown [ -serverid <identificador de servidor> | -applicationName <nombre> ]\n
servertool.shutdown1=apagar un servidor registrado
servertool.shutdown2=\tservidor apagado correctamente.
servertool.startserver=\n\tstartup [ -serverid <identificador de servidor> | -applicationName <nombre> ]\n
servertool.startserver1=iniciar un servidor registrado
servertool.startserver2=\tservidor iniciado correctamente.

servertool.quit=\n\tquit\n
servertool.quit1=salir de esta herramienta

servertool.help=\thelp\n\tO\n\thelp <nombre de comando>\n
servertool.help1=obtener ayuda

servertool.orbidmap=\tSintaxis: orblist [ -serverid <identificador de servidor> | -applicationName <nombre> ]\n
servertool.orbidmap1=lista de nombres de ORB y su asignaci\u00F3n
servertool.orbidmap2=\n\tIdentificador de ORB\t\tNombre de ORB\n\t------\t\t--------\n
pnameserv.success=NameServer constante iniciado correctamente


bootstrap.usage=Sintaxis: {0} <opciones> \n\ndonde <opciones> incluye:\n  -ORBInitialPort        Puerto inicial (necesario)\n  -InitialServicesFile   Archivo que contiene una lista de los servicios iniciales (necesario)\n
bootstrap.success=definiendo puerto en {0} y leyendo servicios de {1}
bootstrap.filenotreadable=el archivo {0} no se puede leer
bootstrap.filenotfound=no se ha encontrado el archivo {0}
bootstrap.exception=se ha obtenido una excepci\u00F3n al guardar las propiedades en el archivo {0}: Excepci\u00F3n {1}

tnameserv.exception=se ha obtenido una excepci\u00F3n al iniciar el servicio de inicializaci\u00F3n de datos en el puerto {0}
tnameserv.usage=intente utilizar un puerto distinto con argumentos de l\u00EDnea de comandos -ORBInitialPort <n.\u00BA de puerto>
tnameserv.invalidhostoption=ORBInitialHost no es una opci\u00F3n v\u00E1lida para NameService
tnameserv.orbinitialport0=ORBInitialPort 0 no es una opci\u00F3n v\u00E1lida para NameService
tnameserv.hs1=Contexto de Nomenclatura Inicial:\n{0}
tnameserv.hs2=TransientNameServer: definiendo puerto para referencias a objeto iniciales en: {0}
tnameserv.hs3=Listo.

orbd.commfailure=\nORBD no puede iniciarse porque ORBinitialPort ya est\u00E1 en uso
orbd.internalexception=\nORBD no puede iniciarse debido a una excepci\u00F3n interna. \nCausas posibles: \n1. El ORBInitialPort o el ORBActivationPort especificado ya est\u00E1 en uso \n2. No tiene permiso de escritura para orb.db 

