#
#
# Copyright 1999-2005 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.
#

# "rmid", inetd", and "wait" should not be translated.
rmid.syntax.exec.invalid=\
        rmid \u5df2\u4ece inetd \u542f\u52a8\uff0c\u4e14\u72b6\u6001\u65e0\u6548 (\u5fc5\u987b\u7b49\u5f85)

# "rmid" and "inetd" should not be translated.
rmid.syntax.port.badarg=\
        \u5982\u679c rmid \u4ece inetd \u542f\u52a8\uff0c\u5219\u65e0\u6cd5\u6307\u5b9a\u7aef\u53e3

# "port" here refers to a TCP port for the server to listen on.
rmid.syntax.port.badnumber=\
	\u7aef\u53e3\u4e0d\u662f\u4e00\u4e2a\u6570\u5b57

# "-port" should not be translated, because it's part of command syntax.
rmid.syntax.port.missing=\
	-port \u9009\u9879\u9700\u8981\u53c2\u6570

# "-log" should not be translated, because it's part of command syntax.
rmid.syntax.log.missing=\
	-log \u9009\u9879\u9700\u8981\u53c2\u6570

# "-log" should not be translated, because it's part of command syntax.
rmid.syntax.log.required=\
        \u9700\u8981 -log \u9009\u9879

# {0} = the (string) illegal argument in question
rmid.syntax.illegal.option=\
	\u975e\u6cd5\u9009\u9879\uff1a{0}

# {0} = the (string) reason text that came with a thrown exception
# "Activation.main" should not be translated, because it's a codepoint
rmid.unexpected.exception=\
	Activation.main: \u51fa\u73b0\u5f02\u5e38\uff1a{0}

# "java.home" should not be translated, because it's a property name
# "ActivatorImpl" should not be translated, because it's a codepoint
rmid.unfound.java.home.property=\
	ActivatorImpl: \u65e0\u6cd5\u5b9a\u4f4d java.home

# "rmid" should not be translated
rmid.inherited.channel.info=\
        rmid \u901a\u8fc7\u7ee7\u627f\u7684\u4fe1\u9053\u542f\u52a8

# "Activation.main" should not be translated, because it's a codepoint
rmid.exec.policy.invalid=\
	Activation.main: \u65e0\u6548\u7684\u53ef\u6267\u884c policy \u7c7b

# "rmid" should not be translated
rmid.exec.policy.exception=\
        rmid:  \u8bd5\u56fe\u83b7\u53d6\u53ef\u6267\u884c\u7b56\u7565\u629b\u51fa:

# "rmid" should not be translated
rmid.exec.command=\
        rmid:  debugExec:  \u6b63\u5728\u8fd0\u884c\u201c{0}\u201d

# "rmid" should not be translated
rmid.group.inactive=\
	rmid: \u6fc0\u6d3b\u7ec4\u65e0\u6548: {0}

# "Activation.main", "sun.rmi.activation.execPolicy", "ExecPermission" and 
# "ExecOptionPermission" should not be translated, since they refer to
# class/permission names.
rmid.exec.perms.inadequate=\
	Activation.main: \u8b66\u544a\uff1a sun.rmi.activation.execPolicy \u7cfb\u7edf\n\
        \u5c5e\u6027\u672a\u88ab\u6307\u5b9a\u4e14 ExecPermissions/ExecOptionPermissions\n\
        \u5747\u672a\u88ab\u6388\u6743\u3002\u968f\u540e\u7684\u6fc0\u6d3b\u5c1d\u8bd5\u5931\u8d25\uff0c\u539f\u56e0\u662f\u5bf9\n\
	ExecPermission/ExecOptionPermission \u7684\u6743\u9650\u68c0\u67e5\u5931\u8d25\u3002 \u6709\u5173\u5982\u4f55\n\
	\u914d\u7f6e rmid \u5b89\u5168\u6027\u7684\u6587\u6863\u8bf4\u660e\uff0c\u8bf7\u53c2\u9605\uff1a \n\
\n\
        http://java.sun.com/j2se/1.4/docs/tooldocs/solaris/rmid.html\n\
        http://java.sun.com/j2se/1.4/docs/tooldocs/win32/rmid.html\n

# "rmid", "-port", "-log", "-stop", "-C" and "-J" should not be translated,
# because they are syntax
rmid.usage=\u7528\u6cd5\uff1a{0} <option>\
\n\
\n\u5176\u4e2d\uff0c<option> \u5305\u62ec:\
\n  -port <option>        \u6307\u5b9a\u4f9b rmid \u4f7f\u7528\u7684\u7aef\u53e3\
\n  -log <directory>    \u6307\u5b9a rmid \u5c06\u65e5\u5fd7\u5199\u5165\u7684\u76ee\u5f55\
\n  -stop               \u505c\u6b62\u5f53\u524d\u7684 rmid \u8c03\u7528\uff08\u5bf9\u6307\u5b9a\u7aef\u53e3\uff09\
\n  -C<runtime \u6807\u8bb0>    \u5411\u6bcf\u4e2a\u5b50\u8fdb\u7a0b\u4f20\u9012\u53c2\u6570\uff08\u6fc0\u6d3b\u7ec4\uff09\
\n  -J<runtime \u6807\u8bb0>    \u5411 java \u89e3\u91ca\u7a0b\u5e8f\u4f20\u9012\u53c2\u6570\
\n\

# This means "The currently running activation daemon has been shut down,
# and is about to exit".
rmid.daemon.shutdown=\
	\u6fc0\u6d3b\u7aef\u53e3\u76d1\u63a7\u7a0b\u5e8f\u5173\u95ed

# "rmid" should not be translated
rmid.restart.group.warning=\
\nrmid:  (\u8b66\u544a) \u91cd\u65b0\u542f\u52a8\u7ec4\u629b\u51fa:

# "rmid" should not be translated
rmid.restart.service.warning=\
\nrmid:  (\u8b66\u544a) \u91cd\u65b0\u542f\u52a8\u670d\u52a1\u629b\u51fa:

# "rmid" should not be translated
rmid.log.update.warning=\
\nrmid:  (\u8b66\u544a) \u65e5\u5fd7\u66f4\u65b0\u629b\u51fa:

# "rmid" should not be translated
rmid.log.snapshot.warning=\
\nrmid:  (\u4e25\u91cd\u8b66\u544a) \u65e5\u5fd7\u5feb\u7167\u629b\u51fa:

# "rmid" should not be translated
rmid.log.recover.warning=\
\nrmid:  (\u8b66\u544a) {0}:  \u6062\u590d\u671f\u95f4\u8df3\u8fc7\u65e5\u5fd7\u8bb0\u5f55:
