# messages.properties -- English language messages
# Copyright (C) 2006  Free Software Foundation, Inc.
#
# This file is part of GNU Classpath.
#
# GNU Classpath is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# GNU Classpath 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 for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNU Classpath; see the file COPYING.  If not, write to the
# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301 USA.
#
# Linking this library statically or dynamically with other modules is
# making a combined work based on this library.  Thus, the terms and
# conditions of the GNU General Public License cover the whole
# combination.
#
# As a special exception, the copyright holders of this library give you
# permission to link this library with independent modules to produce an
# executable, regardless of the license terms of these independent
# modules, and to copy and distribute the resulting executable under
# terms of your choice, provided that you also meet, for each linked
# independent module, the terms and conditions of the license of that
# module.  An independent module is a module which is not derived from
# or based on this library.  If you modify this library, you may extend
# this exception to your version of the library, but you are not
# obligated to do so.  If you do not wish to do so, delete this
# exception statement from your version.

Creator.Ignoring=ignoring entry {0}
Creator.Adding=adding: {0} (in={1,number,integer}) (out={2,number,integer}) (stored {3,number,integer}%)
Extractor.Created=\ \ created: {0}
Extractor.Extracted=\ extracted: {0}
Extractor.Inflated=\ \ inflated: {0}
Indexer.Indexing=indexing: {0}
Main.ArchiveAlreadySet=archive file name already set to {0}
Main.ModeAlreaySet=operation mode already specified
Main.MustSpecify=must specify one of -t, -c, -u, -x, or -i
Main.TwoArgsReqd=-C argument requires both directory and filename
Main.CantHaveBoth=can't specify both -m and -M
Main.NoFilesWithi=can't specify file arguments when using -i
Main.NoMAndi=can't specify -M with -i
Main.AnotherNomAndi=can't specify -m with -i
Main.Usage=Usage: jar -ctxui [OPTIONS] jar-file [-C DIR FILE] FILE...
Main.OpMode=Operation mode
Main.Create=create a new archive
Main.Extract=extract from archive
Main.List=list archive contents
Main.Update=update archive
Main.Index=compute archive index
Main.FileArg=FILE
Main.OpMods=Operation modifiers
Main.ArchiveName=specify archive file name
Main.FileArg2=FILE
Main.NoZip=store only; no ZIP compression
Main.Verbose=verbose operation
Main.NoManifest=do not create a manifest file
Main.ManifestName=specify manifest file
Main.ManifestArgName=FILE
Main.FileNameGroup=File name selection
Main.ChangeDir=change to directory before the next file
Main.ChangeDirArg=DIR FILE
Main.InternalError=jar: internal error:
