#
#
# Copyright 2000-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 a \u00e9t\u00e9 lanc\u00e9 depuis inetd avec un statut invalide (doit \u00eatre wait)

# "rmid" and "inetd" should not be translated.
rmid.syntax.port.badarg=\
	impossible de sp\u00e9cifier port si rmid est lanc\u00e9 depuis inetd

# "port" here refers to a TCP port for the server to listen on.
rmid.syntax.port.badnumber=\
    port n'est pas un num\u00e9ro

# "-port" should not be translated, because it's part of command syntax.
rmid.syntax.port.missing=\
    l'option -port exige un argument

# "-log" should not be translated, because it's part of command syntax.
rmid.syntax.log.missing=\
    l'option -log exige un argument

# "-log" should not be translated, because it's part of command syntax.
rmid.syntax.log.required=\
	option -log requise

# {0} = the (string) illegal argument in question
rmid.syntax.illegal.option=\
	option incorrecte : {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 : une exception s''est produite : {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 : impossible de localiser java.home

# "rmid" should not be translated
rmid.inherited.channel.info=\
	d\u00e9marrage de rmid avec le canal existant

# "Activation.main" should not be translated, because it's a codepoint
rmid.exec.policy.invalid=\
	Activation.main : classe de r\u00e8gle exec incorrecte

# "rmid" should not be translated
rmid.exec.policy.exception=\
	rmid: tenter d'obtenir des basculements de classes exec :

# "rmid" should not be translated
rmid.exec.command=\
	rmid: debugExec : ex\u00e9cution de "{0}"

# "rmid" should not be translated
rmid.group.inactive=\
	rmid : groupe d''activation inactif : {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: avertissement : syst\u00e8me sun.rmi.activation.execPolicy\n\
        propri\u00e9t\u00e9 non sp\u00e9cifi\u00e9e et ExecPermissions/ExecOptionPermissions\n\
        non autoris\u00e9s ; les tentatives d'activation suivantes risquent d'\u00e9chouer en raison de la v\u00e9rification des permissions\n\
    ExecPermission/ExecOptionPermission.  Pour obtenir de la\n\
    documentation sur la configuration de la s\u00e9curit\u00e9 rmid, reportez-vous \u00e0 :\n\
\n\
        http://java.sun.com/j2se/1.4/docs/tooldocs/solaris/rmid.html\n\
        http://javasun.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=Syntaxe : {0} <options>\
\n\
\no\u00f9 <options> comprend :\
\n  -port <port>        Port que rmid doit utiliser\
\n  -log <directory>    R\u00e9pertoire o\u00f9 rmid enregistre le journal\
\n  -stop               Arr\u00eater l''appel courant de rmid (pour le port sp\u00e9cifi\u00e9)\
\n  -C<indicateur d''ex\u00e9cution>    Passe l''argument \u00e0 chaque processus fils (groupe d''activation)\
\n  -J<indicateur d''ex\u00e9cution>    Passe l''argument \u00e0 l''interpr\u00e9teur Java\
\n\

# This means "The currently running activation daemon has been shut down,
# and is about to exit".
rmid.daemon.shutdown=\
	d\u00e9mon d'activation arr\u00eat\u00e9

# "rmid" should not be translated
rmid.restart.group.warning=\
\nrmid : (AVERTISSEMENT) red\u00e9marrer les basculements de groupes :

# "rmid" should not be translated
rmid.restart.service.warning=\
\nrmid : (AVERTISSEMENT) red\u00e9marrer les basculements de services :

# "rmid" should not be translated
rmid.log.update.warning=\
\nrmid : (AVERTISSEMENT) consigner les basculements de mises \u00e0 jour :

# "rmid" should not be translated
rmid.log.snapshot.warning=\
\nrmid : (GRAVE) consigner les basculements de captures instantan\u00e9es :

# "rmid" should not be translated
rmid.log.recover.warning=\
\nrmid : (AVERTISSEMENT) {0} : enregistrement du journal  ignor\u00e9 pendant la r\u00e9cup\u00e9ration  :
