#
# Copyright (c) 2000, 2006, 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.
#

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
