#
# 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=\
     impossibile aprire: {0} 
error.illegal.option=\
        Opzione non valida: {0}
error.bad.option=\
        \u00c8 necessario specificare una delle opzioni -{ctxu}.
error.bad.cflag=\
        Per il flag 'c' \u00e8 necessario specificare file manifesto o di input.
error.bad.uflag=\
        Per il flag 'u' \u00e8 necessario specificare il flag 'e' oppure file manifesto o di input.
error.bad.eflag=\
	Il flag 'e' e il manifesto con l'attributo 'Main-Class' non possono essere specificati\n\
	 insieme.
error.nosuch.fileordir=\
        {0} : impossibile trovare il file o la directory
error.write.file=\
        Errore durante la scrittura del file jar esistente
error.create.dir=\
        {0} : impossibile creare la directory
error.incorrect.length=\
        lunghezza non valida durante l''elaborazione: {0}
out.added.manifest=\
        aggiunto manifesto
out.update.manifest=\
        aggiornato manifesto
out.ignore.entry=\
        la voce {0} sar\u00e0 ignorata
out.adding=\
        aggiunta in corso di: {0}
out.deflated=\
        \ \(compresso {0}%)
out.stored=\
        \ \(archiviato 0%)
out.create=\
        \ \ \ \ \ creato: {0}
out.extracted=\
        \ \ \ estratto: {0}
out.inflated=\
        decompresso: {0}
out.size=\
        \ \(in = {0}) (out = {1})

usage=\
Utilizzo: jar {ctxui}[vfm0Me] [file-jar] [file-manifesto] [punto di ingresso] [-C dir] file ...\n\
Opzioni:\n\
\ \   -c  crea un nuovo archivio\n\
\ \   -t  visualizza l'indice dell'archivio\n\
\ \   -x  estrae i file con nome (o tutti i file) dall'archivio\n\
\ \   -u  aggiorna l'archivio esistente\n\
\ \   -v  genera output commentato dall'output standard\n\
\ \   -f  specifica il nome file dell'archivio\n\
\ \   -m  include informazioni manifesto dal file manifesto specificato\n\
\ \   -e  specifica il punto di ingresso per l'applicazione stand-alone \n\
\ \       inclusa nel file jar eseguibile\n\
\ \   -0  solo memorizzazione; senza compressione ZIP\n\
\ \   -M  consente di non creare un file manifesto per le voci\n\
\ \   -i  genera informazioni sull'indice per i file jar specificati\n\
\ \   -C  imposta la directory specificata e include il file seguente\n\
Se un file \u00e8 una directory, verr\u00e0 elaborato in modo ricorsivo.\n\
Il nome del file manifesto, del file di archivio e del punto di ingresso devono\n\
essere specificati nello stesso ordine dei flag 'm', 'f' ed 'e'.\n\n\
Esempio 1: archiviazione di due file di classe in un archivio con il nome classes.jar: \n\
\ \      jar cvf classes.jar Foo.class Bar.class \n\
Esempio 2: utilizzo del file manifesto esistente 'mymanifest' e archiviazione di tutti i\n\
\ \          file della directory foo/ in 'classes.jar': \n\
\ \      jar cvfm classes.jar mymanifest -C foo/ .\n
