#
# Copyright 2000-2006 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.
#

error.cant.open=\
     \u00d6ffnen nicht m\u00f6glich: {0} 
error.illegal.option=\
        Unzul\u00e4ssige Option: {0}
error.bad.option=\
        Eine der Optionen -{ctxu} muss angegeben werden.
error.bad.cflag=\
        Flag 'c' erfordert Angabe von Manifest oder Eingabedateien!
error.bad.uflag=\
        Flag 'u' erfordert Angabe von Manifest, Flag 'e' oder Eingabedateien!
error.bad.eflag=\
	Flag 'e' und Manifest mit dem Attribut 'Main-Class' k\u00f6nnen nicht zusammen angegeben\n\
	 werden.
error.nosuch.fileordir=\
        {0} : Datei oder Verzeichnis existiert nicht.
error.write.file=\
        Fehler beim Schreiben in vorhandener JAR-Datei.
error.create.dir=\
        {0} : Verzeichnis konnte nicht erstellt werden.
error.incorrect.length=\
        Falsche L\u00e4nge bei der Verarbeitung von: {0}
out.added.manifest=\
        Manifest wurde hinzugef\u00fcgt.
out.update.manifest=\
        Manifest wurde aktualisiert.
out.ignore.entry=\
        Eintrag {0} wird ignoriert.
out.adding=\
        Hinzuf\u00fcgen von: {0}
out.deflated=\
        \ \(komprimiert {0} %)
out.stored=\
        \ \(gespeichert 0 %)
out.create=\
        \ \ \ \ \ erstellt: {0}
out.extracted=\
        \ \ \ extrahiert: {0}
out.inflated=\
        dekomprimiert: {0}
out.size=\
        \ \(ein = {0}) (aus = {1})

usage=\
Syntax: jar {ctxui}[vfm0Me] [jar-Datei] [Manifest-Datei] [Einstiegspunkt] [-C Verzeichnis] Dateien ...\n\
Optionen:\n\
\ \   -c  Neues Archiv erstellen\n\
\ \   -t  Inhaltsverzeichnis f\u00fcr Archiv auflisten\n\
\ \   -x  Genannte (oder alle) Dateien aus Archiv extrahieren\n\
\ \   -u  Vorhandenes Archiv aktualisieren\n\
\ \   -v  Ausf\u00fchrliche Ausgabe f\u00fcr Standardausgabe erzeugen\n\
\ \   -f  Namen der Archivdatei angeben\n\
\ \   -m  Manifest-Information von angegebener Manifest-Datei einschlie\u00dfen\n\
\ \   -e  Geben Sie einen Anwendungs-Einstiegspunkt f\u00fcr die \n\
\ \       in einer ausf\u00fchrbaren jar-Datei geb\u00fcndelte eigenst\u00e4ndige Anwendung an.\n\
\ \   -0  Nur speichern (keine ZIP-Komprimierung)\n\
\ \   -M  Keine Manifest-Datei f\u00fcr die Eintr\u00e4ge erstellen\n\
\ \   -i  Index-Information f\u00fcr angegebene jar-Dateien erstellen\n\
\ \   -C  Zum angegebenen Verzeichnis wechseln und folgende Datei einschlie\u00dfen\n\
Falls eine Datei ein Verzeichnis ist, wird es rekursiv verarbeitet.\n\
Der Name der Manifest-Datei, der Name der Archivdatei und der Name des Einstiegspunkts werden \n\
in derselben Reihenfolge wie die Flags 'm', 'f' und 'e' angegeben.\n\n\
Beispiel 1: So archivieren Sie zwei Klassendateien in ein Archiv mit Namen classes.jar: \n\
\ \      jar cvf classes.jar Foo.class Bar.class \n\
Beispiel 2: Verwenden der vorhandenen Manifest-Datei 'mymanifest' und archivieren\n\
\ \          aller Dateien im Verzeichnis foo/ in 'classes.jar': \n\
\ \      jar cvfm classes.jar mymanifest -C foo/ .\n
