#
# Copyright (c) 1999, 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=\
     \u4e0d\u80fd\u6253\u5f00\uff1a{0} 
error.illegal.option=\
        \u975e\u6cd5\u9009\u9879\uff1a{0}
error.bad.option=\
        \u5fc5\u987b\u6307\u5b9a {ctxu} \u4e2d\u7684\u4efb\u4e00\u9009\u9879\u3002
error.bad.cflag=\
'c' \u6807\u5fd7\u8981\u6c42\u6307\u5b9a\u6e05\u5355\u6216\u8f93\u5165\u6587\u4ef6\uff01
error.bad.uflag=\
'u' \u6807\u5fd7\u8981\u6c42\u6307\u5b9a\u6e05\u5355\u3001'e' \u6807\u5fd7\u6216\u8f93\u5165\u6587\u4ef6\uff01
error.bad.eflag=\
	\u4e0d\u80fd\u540c\u65f6\u6307\u5b9a 'e' \u6807\u5fd7\u548c\u5177\u6709 'Main-Class' \u5c5e\u6027\u7684\n\
	 \u6e05\u5355\uff01
error.nosuch.fileordir=\
        \u6ca1\u6709\u8fd9\u4e2a\u6587\u4ef6\u6216\u76ee\u5f55\uff1a{0}
error.write.file=\
        \u5199\u5b58\u5728\u7684jar\u6587\u4ef6\u65f6\u9519\u8bef
error.create.dir=\
        \u4e0d\u80fd\u521b\u5efa\u76ee\u5f55\uff1a{0}
error.incorrect.length=\
        \u5904\u7406\u65f6\u9047\u5230\u4e0d\u6b63\u786e\u7684\u957f\u5ea6\uff1a{0}
out.added.manifest=\
        \u6807\u660e\u6e05\u5355(manifest)
out.update.manifest=\
        \u66f4\u65b0\u6e05\u5355(manifest)
out.ignore.entry=\
        \u5ffd\u7565\u9879 {0}
out.adding=\
        \u589e\u52a0\uff1a{0}
out.deflated=\
        (\u538b\u7f29\u4e86 {0}%)
out.stored=\
        (\u5b58\u50a8\u4e86 0%)
out.create=\
        \ \ \u521b\u5efa\uff1a{0}
out.extracted=\
        \u5c55\u5f00\uff1a{0}
out.inflated=\
        \ \ \u89e3\u538b {0}
out.size=\
        (\u8bfb\u5165= {0}) (\u5199\u51fa= {1})

usage=\
\u7528\u6cd5: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...\n\
\u9009\u9879\u5305\u62ec\uff1a\n\
\ \   -c  \u521b\u5efa\u65b0\u7684\u5f52\u6863\u6587\u4ef6\n\
\ \   -t  \u5217\u51fa\u5f52\u6863\u76ee\u5f55\n\
\ \   -x  \u89e3\u538b\u7f29\u5df2\u5f52\u6863\u7684\u6307\u5b9a\uff08\u6216\u6240\u6709\uff09\u6587\u4ef6\n\
\ \   -u  \u66f4\u65b0\u73b0\u6709\u7684\u5f52\u6863\u6587\u4ef6\n\
\ \   -v  \u5728\u6807\u51c6\u8f93\u51fa\u4e2d\u751f\u6210\u8be6\u7ec6\u8f93\u51fa\n\
\ \   -f  \u6307\u5b9a\u5f52\u6863\u6587\u4ef6\u540d\n\
\ \   -m  \u5305\u542b\u6307\u5b9a\u6e05\u5355\u6587\u4ef6\u4e2d\u7684\u6e05\u5355\u4fe1\u606f\n\
\ \   -e  \u4e3a\u6346\u7ed1\u5230\u53ef\u6267\u884c jar \u6587\u4ef6\u7684\u72ec\u7acb\u5e94\u7528\u7a0b\u5e8f\n\
\ \       \u6307\u5b9a\u5e94\u7528\u7a0b\u5e8f\u5165\u53e3\u70b9\n\
\ \   -0  \u4ec5\u5b58\u50a8\uff1b\u4e0d\u4f7f\u7528\u4efb\u4f55 ZIP \u538b\u7f29\n\
\ \   -M  \u4e0d\u521b\u5efa\u6761\u76ee\u7684\u6e05\u5355\u6587\u4ef6\n\
\ \   -i  \u4e3a\u6307\u5b9a\u7684 jar \u6587\u4ef6\u751f\u6210\u7d22\u5f15\u4fe1\u606f\n\
\ \   -C  \u66f4\u6539\u4e3a\u6307\u5b9a\u7684\u76ee\u5f55\u5e76\u5305\u542b\u5176\u4e2d\u7684\u6587\u4ef6\n\
\u5982\u679c\u6709\u4efb\u4f55\u76ee\u5f55\u6587\u4ef6\uff0c\u5219\u5bf9\u5176\u8fdb\u884c\u9012\u5f52\u5904\u7406\u3002\n\
\u6e05\u5355\u6587\u4ef6\u540d\u3001\u5f52\u6863\u6587\u4ef6\u540d\u548c\u5165\u53e3\u70b9\u540d\u7684\u6307\u5b9a\u987a\u5e8f\n\
\u4e0e "m"\u3001"f" \u548c "e" \u6807\u5fd7\u7684\u6307\u5b9a\u987a\u5e8f\u76f8\u540c\u3002\n\n\
\u793a\u4f8b 1\uff1a\u5c06\u4e24\u4e2a\u7c7b\u6587\u4ef6\u5f52\u6863\u5230\u4e00\u4e2a\u540d\u4e3a classes.jar \u7684\u5f52\u6863\u6587\u4ef6\u4e2d\uff1a\n\
\ \      jar cvf classes.jar Foo.class Bar.class \n\
\u793a\u4f8b 2\uff1a\u4f7f\u7528\u73b0\u6709\u7684\u6e05\u5355\u6587\u4ef6 "mymanifest" \u5e76\n\
\ \          \u5c06 foo/ \u76ee\u5f55\u4e2d\u7684\u6240\u6709\u6587\u4ef6\u5f52\u6863\u5230 "classes.jar" \u4e2d\uff1a\n\
\ \      jar cvfm classes.jar mymanifest -C foo/ .\n
