#
# 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=Verwendung: {0} <Optionen> \n\nwobei folgende <Optionen> m\u00F6glich sind:\n  -port                  Aktivierungsport, an dem der ORBD gestartet werden sollte, Standardwert 1049 (optional)\n  -defaultdb             Verzeichnis f\u00FCr ORBD-Dateien, Standardwert "./orb.db" (optional)\n  -serverid              Server-ID f\u00FCr ORBD, Standardwert 1 (optional)\n  -ORBInitialPort        Anfangsport (erforderlich)\n  -ORBInitialHost        Anf\u00E4nglicher HostName (erforderlich)\n

servertool.usage=Verwendung: {0} <Optionen> \n\nwobei folgende <Optionen> m\u00F6glich sind:\n  -ORBInitialPort        Anfangsport (erforderlich)\n  -ORBInitialHost        Anf\u00E4nglicher HostName (erforderlich)\n
servertool.banner=\n\nWillkommen beim Java IDL-Servertool \nGeben Sie die entsprechenden Befehle im Prompt ein \n
servertool.shorthelp=\n\n\tVerf\u00FCgbare Befehle: \n\t------------------- \n
servertool.baddef=Ung\u00FCltige Serverdefinition: {0}
servertool.nosuchserver=\tServer wurde nicht gefunden.
servertool.helddown=\tServer ist au\u00DFer Betrieb.
servertool.nosuchorb=\tUng\u00FCltiger ORB.
servertool.serverup=\tServer ist bereits hochgefahren.
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=\tServer wird nicht ausgef\u00FChrt.
servertool.register=\n\n\tregister -server <Serverklassenname> \n\t         -applicationName <alternativer Servername> \n\t         -classpath <Classpath f\u00FCr Server> \n\t         -args <Argumente f\u00FCr Server> \n\t         -vmargs <Argumente f\u00FCr Server Java VM>\n
servertool.register1=aktivierbaren Server registrieren
servertool.register2=\tServer registriert (serverid = {0}).
servertool.register3=\tServer registriert, aber au\u00DFer Betrieb (serverid = {0}).
servertool.register4=\tServer bereits registriert (serverid = {0}).

servertool.unregister=\n\tunregister [ -serverid <Server-ID> | -applicationName <Name> ] \n
servertool.unregister1=Registrierung eines registrierten Servers aufheben
servertool.unregister2=\tServerregistrierung aufgehoben.

servertool.locate=\n\tlocate [ -serverid <Server-ID> | -applicationName <Name> ] [ <-endpointType <endpointType> ] \n
servertool.locate1=Ports eines speziellen Typs f\u00FCr einen registrierten Server finden
servertool.locate2=\n\n\tHostname {0} \n\n\t\tPort\t\tPorttyp\t\tORB-ID\n\t\t----\t\t-------\t\t------\n
servertool.locateorb=\n\tlocateperorb [ -serverid <Server-ID> | -applicationName <Name> ] [ -orbid <ORB-Name> ]\n
servertool.locateorb1=Ports f\u00FCr einen speziellen ORB bei einem registrierten Server finden
servertool.locateorb2=\n\n\tHostname {0} \n\n\t\tPort\t\tPortType\t\tORB-ID\n\t\t----\t\t-------\t\t------\n
servertool.getserverid=\n\tgetserverid [ -applicationName <Name> ] \n
servertool.getserverid1=Server-ID f\u00FCr applicationName zur\u00FCckgeben
servertool.getserverid2=\tServer-ID f\u00FCr applicationName {0} ist {1}

servertool.list=\n\tlist\n
servertool.list1=alle registrierten Server auflisten
servertool.list2=\n\tServer-ID\tServerklassenname\t\tServeranwendung\n\t---------\t-----------------\t\t------------------\n
servertool.listactive=\n\tlistactive
servertool.listactive1=derzeit aktive Server auflisten
servertool.listappnames=\tlistappnames\n
servertool.listappnames1=derzeit definierte applicationNames auflisten
servertool.listappnames2=Derzeit definierte Server-applicationNames:

servertool.shutdown=\n\tshutdown [ -serverid <Server-ID> | -applicationName <Name> ]\n
servertool.shutdown1=registrierten Server herunterfahren
servertool.shutdown2=\tServer erfolgreich heruntergefahren.
servertool.startserver=\n\tstartup [ -serverid <Server-ID> | -applicationName <Name> ]\n
servertool.startserver1=registrierten Server starten
servertool.startserver2=\tServer erfolgreich hochgefahren.

servertool.quit=\n\tquit\n
servertool.quit1=dieses Tool beenden

servertool.help=\thelp\n\tOR\n\thelp <Befehlsname>\n
servertool.help1=Hilfe abrufen

servertool.orbidmap=\\Verwendung: orblist [ -serverid <Server-ID> | -applicationName <Name> ]\n
servertool.orbidmap1=Liste von ORB-Namen und ihren Zuordnungen
servertool.orbidmap2=\n\tORB-ID\t\tORB-Name\n\t------\t\t--------\n
pnameserv.success=Persistenter NameServer erfolgreich gestartet


bootstrap.usage=Verwendung: {0} <Optionen> \n\nwobei folgende <Optionen> m\u00F6glich sind:\n  -ORBInitialPort        Anf\u00E4nglicher Port (erforderlich)\n  -InitialServicesFile   Datei mit Liste von anf\u00E4nglichen Services (erforderlich)\n
bootstrap.success=Port wird auf {0} gesetzt, Services werden aus {1} gelesen
bootstrap.filenotreadable=Datei {0} kann nicht gelesen werden
bootstrap.filenotfound=Datei {0} wurde nicht gefunden
bootstrap.exception=Beim Speichern von Eigenschaften in Datei {0} wurde eine Ausnahme abgefangen: Ausnahme {1}

tnameserv.exception=Beim Hochfahren des Bootstrap-Services auf Port {0} wurde eine Ausnahme abgefangen
tnameserv.usage=Verwenden Sie einen anderen Port mit den Befehlszeilenargumenten -ORBInitialPort <Portnummer>
tnameserv.invalidhostoption=ORBInitialHost ist keine g\u00FCltige Option f\u00FCr NameService
tnameserv.orbinitialport0=ORBInitialPort 0 ist keine g\u00FCltige Option f\u00FCr NameService
tnameserv.hs1=Anf\u00E4nglicher Namenskontext:\n{0}
tnameserv.hs2=TransientNameServer: Port f\u00FCr anf\u00E4ngliche Objektreferenzen wird auf {0} gesetzt
tnameserv.hs3=Bereit.

orbd.commfailure=\nStart von ORBD nicht erfolgreich, da ORBinitialPort bereits verwendet wird
orbd.internalexception=\nStart von ORBD aufgrund einer internen Ausnahme nicht erfolgreich. \nM\u00F6gliche Ursachen: \n1. Der angegebene ORBInitialPort oder ORBActivationPort wird bereits verwendet \n2. Keine Berechtigung zum Schreiben von orb.db 

