#
#
# Copyright 2000-2005 Sun Microsystems, Inc.  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.  Sun designates this
# particular file as subject to the "Classpath" exception as provided
# by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
# CA 95054 USA or visit www.sun.com if you need additional information or
# have any questions.
#

# "rmid", inetd", and "wait" should not be translated.
rmid.syntax.exec.invalid=\
        rmid wurde mit einem ung\u00fcltigen Status (muss wait sein) von inetd gestartet

# "rmid" and "inetd" should not be translated.
rmid.syntax.port.badarg=\
	Der Port kann nicht angegeben werden, wenn rmid von inetd gestartet wird

# "port" here refers to a TCP port for the server to listen on.
rmid.syntax.port.badnumber=\
    Port ist keine Zahl

# "-port" should not be translated, because it's part of command syntax.
rmid.syntax.port.missing=\
    F\u00fcr Option -port ist ein Argument erforderlich.

# "-log" should not be translated, because it's part of command syntax.
rmid.syntax.log.missing=\
    F\u00fcr Option -log ist ein Argument erforderlich.

# "-log" should not be translated, because it's part of command syntax.
rmid.syntax.log.required=\
	Die Option -log ist erforderlich.

# {0} = the (string) illegal argument in question
rmid.syntax.illegal.option=\
Unzul\u00e4ssige Option: {0}

# {0} = the (string) reason text that came with a thrown exception
# "Activation.main" should not be translated, because it's a codepoint
rmid.unexpected.exception=\
	Activation.main: Es ist eine Ausnahme aufgetreten: {0}

# "java.home" should not be translated, because it's a property name
# "ActivatorImpl" should not be translated, because it's a codepoint
rmid.unfound.java.home.property=\
	ActivatorImpl: java.home konnte nicht gefunden werden.

# "rmid" should not be translated
rmid.inherited.channel.info=\
	rmid-Start mit \u00fcbernommenem Kanal

# "Activation.main" should not be translated, because it's a codepoint
rmid.exec.policy.invalid=\
	Activation.main: ung\u00fcltige exec-Verfahrensklasse

# "rmid" should not be translated
rmid.exec.policy.exception=\
	rmid: Der Versuch, die exec-Richtlinie abzurufen, bewirkt:

# "rmid" should not be translated
rmid.exec.command=\
	rmid: debugExec: "{0}" wird ausgef\u00fchrt

# "rmid" should not be translated
rmid.group.inactive=\
	rmid: Aktivierungsgruppe inaktiv: {0}

# "Activation.main", "sun.rmi.activation.execPolicy", "ExecPermission" and 
# "ExecOptionPermission" should not be translated, since they refer to
# class/permission names.
rmid.exec.perms.inadequate=\
    Activation.main: Achtung: Systemeigenschaft sun.rmi.activation.execPolicy\n\
        nicht angegeben, und keine ExecPermissions/ExecOptionPermissions\n\
        gew\u00e4hrt; erneute Aktivierung kann wegen erfolgloser\n\
    Berechtigungspr\u00fcfungen ExecPermission/ExecOptionPermission fehlschlagen. Weitere\n\
    Dokumentation \u00fcber die Konfiguration von rmid-Sicherheit finden Sie unter:\n\
\n\
        http://java.sun.com/j2se/1.4/docs/tooldocs/solaris/rmid.html\n\
        http://java.sun.com/j2se/1.4/docs/tooldocs/win32/rmid.html\n

# "rmid", "-port", "-log", "-stop", "-C" and "-J" should not be translated,
# because they are syntax
rmid.usage=Syntax: {0} <Optionen>\
\n\
\nwobei folgende <Optionen> m\u00f6glich sind:\
\n  -port <Port>        Angabe des Ports f\u00fcr rmid\
\n  -log <Verzeichnis>  Angabe des Verzeichnisses, in das rmid die Log-Datei schreibt\
\n  -stop               Aktuellen Aufruf von rmid stoppen (f\u00fcr den angegebenen Anschluss)\
\n  -C<Laufzeitflag>    \u00dcbergeben des Arguments an jeden untergeordneten Prozess (Aktivierungsgruppe)\
\n  -J<Laufzeitflag>    Argument an den Java-Interpreter \u00fcbergeben\
\n\

# This means "The currently running activation daemon has been shut down,
# and is about to exit".
rmid.daemon.shutdown=\
Aktivierungsdaemon wird geschlossen.

# "rmid" should not be translated
rmid.restart.group.warning=\
\nrmid: (WARNUNG) Neustart der Gruppe bewirkt:

# "rmid" should not be translated
rmid.restart.service.warning=\
\nrmid: (WARNUNG) Neustart des Dienstes bewirkt:

# "rmid" should not be translated
rmid.log.update.warning=\
\nrmid: (WARNUNG) Aktualisierung des Protokolls bewirkt:

# "rmid" should not be translated
rmid.log.snapshot.warning=\
\nrmid: (SCHWERW.) Momentaufnahme des Protokolls bewirkt:

# "rmid" should not be translated
rmid.log.recover.warning=\
\nrmid: (WARNUNG) {0}: \u00dcberspringen eines Protokolleintrags bei der Wiederherstellung:
