#
# Copyright 1999-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=\
     \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
