#
#
# Copyright (c) 2000, 2005, 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.
#

# "rmid", inetd", and "wait" should not be translated.
rmid.syntax.exec.invalid=\
        rmid se ha iniciado desde inetd con un estado no v\u00e1lido (debe ser wait)

# "rmid" and "inetd" should not be translated.
rmid.syntax.port.badarg=\
	no se puede especificar el puerto si rmid se ha iniciado desde inetd

# "port" here refers to a TCP port for the server to listen on.
rmid.syntax.port.badnumber=\
    el puerto no es un n\u00famero

# "-port" should not be translated, because it's part of command syntax.
rmid.syntax.port.missing=\
    la opci\u00f3n -port requiere un argumento

# "-log" should not be translated, because it's part of command syntax.
rmid.syntax.log.missing=\
    la opci\u00f3n -log requiere un argumento

# "-log" should not be translated, because it's part of command syntax.
rmid.syntax.log.required=\
	la opci\u00f3n -log es obligatoria

# {0} = the (string) illegal argument in question
rmid.syntax.illegal.option=\
opci\u00f3n no permitida: {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: ha ocurrido una excepci\u00f3n: {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: imposible encontrar java.home

# "rmid" should not be translated
rmid.inherited.channel.info=\
	inicio de rmid con canal heredado

# "Activation.main" should not be translated, because it's a codepoint
rmid.exec.policy.invalid=\
	Activation.main: Clase de norma de ejecuci\u00f3n no v\u00e1lida

# "rmid" should not be translated
rmid.exec.policy.exception=\
	rmid: el intento de obtener la norma de ejecuci\u00f3n indica:

# "rmid" should not be translated
rmid.exec.command=\
	rmid: debugExec: en ejecuci\u00f3n "{0}"

# "rmid" should not be translated
rmid.group.inactive=\
	rmid: grupo de activaci\u00f3n inactivo: {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: advertencia: no se han especificado las propiedades del sistema sun.rmi.activation.execPolicy\n\
        y no se han concedido ExecPermissions/ExecOptionPermissions;\n\
        los intentos de activaci\u00f3n posteriores pueden fallar debido a\n\
    comprobaciones de permiso ExecPermission/ExecOptionPermission no satisfactorias. Para\n\
    obtener documentaci\u00f3n sobre c\u00f3mo configurar la seguridad rmid, rem\u00edtase a:\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=Sintaxis: {0} <opciones>\
\n\
\ndonde <opciones> incluye:\
\n  -port <puerto>      Especificar puerto para uso de rmid\
\n  -log <directorio>   Especificar directorio en el que rmid escribir\u00e1 el registro\
\n  -stop               Detener la llamada actual de rmid (para el puerto especificado)\
\n  -C<indicador runtime> Pasar argumento a cada uno de los procesos subordinados (grupo de activaci\u00f3n)\
\n  -J<indicador runtime> Pasar argumento al int\u00e9rprete de Java\
\n\

# This means "The currently running activation daemon has been shut down,
# and is about to exit".
rmid.daemon.shutdown=\
daemon de activaci\u00f3n desactivado

# "rmid" should not be translated
rmid.restart.group.warning=\
\nrmid: (ADVERTENCIA) el reinicio del grupo indica:

# "rmid" should not be translated
rmid.restart.service.warning=\
\nrmid: (ADVERTENCIA) el reinicio del servicio indica:

# "rmid" should not be translated
rmid.log.update.warning=\
\nrmid: (ADVERTENCIA) la actualizaci\u00f3n del registro indica:

# "rmid" should not be translated
rmid.log.snapshot.warning=\
\nrmid: (GRAVE) la instant\u00e1nea del registro indica:

# "rmid" should not be translated
rmid.log.recover.warning=\
\nrmid: (ADVERTENCIA) {0}: omitiendo la escritura del registro durante la recuperaci\u00f3n:
