#
# 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=\
     no es posible abrir: {0} 
error.illegal.option=\
        Opci\u00f3n no permitida: {0}
error.bad.option=\
        Se debe especificar una de las opciones -{ctxu}.
error.bad.cflag=\
        La marca 'c' necesita la especificaci\u00f3n de archivos de manifiesto o de entrada.
error.bad.uflag=\
        La marca 'u' necesita la especificaci\u00f3n de archivos de manifiesto, de entrada o marca 'e'.
error.bad.eflag=\
	la marca 'e' y el manifiesto con el atributo 'Main-Class' no pueden especificarse \n\
	 a la vez.
error.nosuch.fileordir=\
        {0} : no existe tal archivo o directorio.
error.write.file=\
        Error al escribir un archivo jar existente
error.create.dir=\
        {0} : no fue posible crear el directorio
error.incorrect.length=\
        longitud incorrecta al procesar: {0}
out.added.manifest=\
        manifest agregado
out.update.manifest=\
        manifest actualizado
out.ignore.entry=\
        ignorando entrada {0}
out.adding=\
        agregando: {0}
out.deflated=\
        \ \(desinflado {0}%)
out.stored=\
        \ \(almacenado 0%)
out.create=\
        \ \ creado: {0}
out.extracted=\
        extra\u00eddo: {0}
out.inflated=\
        \ inflado: {0}
out.size=\
        \ \(entrada = {0}) (salida = {1})

usage=\
Uso: jar {ctxui}[vfm0Me] [archivo-jar] [archivo-manifiesto] [punto-entrada] [-C dir] archivos...\n\
Opciones:\n\
\ \   -c  crear archivo de almacenamiento\n\
\ \   -t  crear la tabla de contenido del archivo de almacenamiento\n\
\ \   -x  extraer el archivo mencionado (o todos) del archivo de almacenamiento\n\
\ \   -u  actualizar archivo de almacenamiento existente\n\
\ \   -v  generar salida detallada de los datos de salida est\u00e1ndar\n\
\ \   -f  especificar nombre del archivo de almacenamiento\n\
\ \   -m  incluir informaci\u00f3n de un archivo de manifiesto especificado\n\
\ \   -e  especificar punto de entrada de la aplicaci\u00f3n para aplicaci\u00f3n aut\u00f3noma \n\
\ \       que se incluye dentro de un archivo jar ejecutable\n\
\ \   -0  s\u00f3lo almacenar; no utilizar compresi\u00f3n ZIP\n\
\ \   -M  no crear un archivo de manifiesto para las entradas\n\
\ \   -i  generar informaci\u00f3n de \u00edndice para los archivos jar especificados\n\
\ \   -C  cambiar al directorio especificado e incluir el archivo siguiente\n\
Si alg\u00fan archivo coincide tambi\u00e9n con un directorio, ambos se procesar\u00e1n.\n\
El nombre del archivo de manifiesto, el nombre del archivo de almacenamiento y el nombre del punto de entrada se\n\
especifican en el mismo orden que las marcas 'm', 'f' y 'e'.\n\n\
Ejemplo 1: para archivar dos archivos de clases en un archivo de almacenamiento llamado classes.jar: \n\
\ \      jar cvf classes.jar Foo.class Bar.class \n\
Ejemplo 2: utilice un archivo de manifiesto ya creado, 'mymanifest', y archive todos los\n\
\ \          archivos del directorio foo/ en 'classes.jar': \n\
\ \      jar cvfm classes.jar mymanifest -C foo/ .\n
