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

orbd.usage=Syntaxe : {0} <options> \n\no\u00F9 <options> comprend :\n  -port                  Port d''activation o\u00F9 l''ORBD doit \u00EAtre d\u00E9marr\u00E9, 1049 par d\u00E9faut (facultatif)\n  -defaultdb             R\u00E9pertoire des fichiers ORBD, par d\u00E9faut "./orb.db" (facultatif)\n  -serverid              ID de serveur pour ORBD, 1 par d\u00E9faut (facultatif)\n  -ORBInitialPort        Port initial (obligatoire)\n  -ORBInitialHost        Nom d''h\u00F4te initial (obligatoire)\n

servertool.usage=Syntaxe : {0} <options> \n\no\u00F9 <options> comprend :\n  -ORBInitialPort        Port initial (obligatoire)\n  -ORBInitialHost        Nom d''h\u00F4te initial (obligatoire)\n
servertool.banner=\n\nBienvenue dans l'outil Java IDL Server Tool \nSp\u00E9cifiez des commandes \u00E0 l'invite \n
servertool.shorthelp=\n\n\tCommandes disponibles : \n\t------------------- \n
servertool.baddef=D\u00E9finition de serveur incorrecte : {0}
servertool.nosuchserver=\tce serveur est introuvable.
servertool.helddown=\tserveur interrompu.
servertool.nosuchorb=\tORB non valide.
servertool.serverup=\tle serveur fonctionne d\u00E9j\u00E0.
servertool.appname=\tapplicationName     - {0}
servertool.name=\tname      - {0}
servertool.classpath=\tclasspath - {0}
servertool.args=\targs      - {0}
servertool.vmargs=\tvmargs    - {0}
servertool.serverid=\tID de serveur - {0}
servertool.servernotrunning=\tle serveur ne fonctionne pas.
servertool.register=\n\n\tregister -server <nom de classe de serveur> \n\t         -applicationName <deuxi\u00E8me nom de serveur> \n\t         -classpath <variable d'environnement CLASSPATH du serveur> \n\t         -args <arguments au serveur> \n\t         -vmargs <arguments au serveur Java VM>\n
servertool.register1=inscrire un serveur activable
servertool.register2=\tserveur inscrit (ID serveur = {0}).
servertool.register3=\tserveur inscrit mais interrompu (ID serveur = {0}).
servertool.register4=\tserveur d\u00E9j\u00E0 inscrit (ID serveur = {0}).

servertool.unregister=\n\tunregister [ -serverid <ID serveur> | -applicationName <nom> ] \n
servertool.unregister1=d\u00E9sinscrire un serveur inscrit
servertool.unregister2=\tserveur d\u00E9sinscrit.

servertool.locate=\n\tlocate [ -serverid <ID serveur> | -applicationName <nom> ] [ <-endpointType <type de point d'extr\u00E9mit\u00E9> ] \n
servertool.locate1=rep\u00E9rer des ports de type sp\u00E9cifique d'un serveur inscrit
servertool.locate2=\n\n\tNom d''h\u00F4te {0} \n\n\t\tPort\t\tType de port\t\tID ORB\n\t\t----\t\t---------\t\t------\n
servertool.locateorb=\n\tlocateperorb [ -serverid <ID serveur> | -applicationName <nom> ] [ -orbid <nom ORB> ]\n
servertool.locateorb1=rep\u00E9rer les ports d'un ORB sp\u00E9cifique de serveur inscrit
servertool.locateorb2=\n\n\tNom d''h\u00F4te {0} \n\n\t\tPort\t\tType de port\t\tID ORB\n\t\t----\t\t--------\t\t------\n
servertool.getserverid=\n\tgetserverid [ -applicationName <nom> ] \n
servertool.getserverid1=renvoyer l'ID serveur pour un nom d'application
servertool.getserverid2=\tL''ID serveur du nom d''application {0} est {1}

servertool.list=\n\tlist\n
servertool.list1=lister tous les serveurs inscrits
servertool.list2=\n\tID serveur\tNom de classe serveur\t\tApplication serveur\n\t---------\t-----------------\t\t------------------\n
servertool.listactive=\n\tlistactive
servertool.listactive1=lister les serveurs actifs
servertool.listappnames=\tlistappnames\n
servertool.listappnames1=lister les noms d'application d\u00E9finis
servertool.listappnames2=Noms d'application du serveur d\u00E9finis :

servertool.shutdown=\n\tshutdown [ -serverid <ID serveur> | -applicationName <nom> ]\n
servertool.shutdown1=arr\u00EAter un serveur inscrit
servertool.shutdown2=\tserveur arr\u00EAt\u00E9.
servertool.startserver=\n\tstartup [ -serverid <ID serveur> | -applicationName <nom> ]\n
servertool.startserver1=d\u00E9marrer un serveur inscrit
servertool.startserver2=\tserveur d\u00E9marr\u00E9.

servertool.quit=\n\tquit\n
servertool.quit1=fermer cet outil

servertool.help=\thelp\n\tOR\n\thelp <commande>\n
servertool.help1=afficher l'aide

servertool.orbidmap=\tSyntaxe : orblist [ -serverid <ID serveur> | -applicationName <nom> ]\n
servertool.orbidmap1=liste des noms ORB et de leur mappage
servertool.orbidmap2=\n\tID ORB\t\tNom ORB\n\t------\t\t--------\n
pnameserv.success=NameServer persistant d\u00E9marr\u00E9


bootstrap.usage=Syntaxe : {0} <options> \n\no\u00F9 <options> comprend :\n  -ORBInitialPort        Port initial (obligatoire)\n  -InitialServicesFile   Fichier contenant la liste des services initiaux (obligatoire)\n
bootstrap.success=configuration du port sur {0} et lecture des services de {1}
bootstrap.filenotreadable=le fichier {0} n''est pas lisible
bootstrap.filenotfound=fichier {0} introuvable
bootstrap.exception=exception d\u00E9tect\u00E9e lors de l''enregistrement des propri\u00E9t\u00E9s dans le fichier {0}. Exception : {1}

tnameserv.exception=exception d\u00E9tect\u00E9e lors du d\u00E9marrage du service bootstrap sur le port {0}
tnameserv.usage=essayez un autre port avec les arguments de ligne de commande -ORBInitialPort <num\u00E9ro de port>
tnameserv.invalidhostoption=ORBInitialHost n'est pas une option valide pour NameService
tnameserv.orbinitialport0=ORBInitialPort 0 n'est pas une option valide pour NameService
tnameserv.hs1=Contexte de d\u00E9nomination initial :\n{0}
tnameserv.hs2=TransientNameServer : configuration du port pour des r\u00E9f\u00E9rences d''objet initial sur {0}
tnameserv.hs3=Pr\u00EAt.

orbd.commfailure=\nLe d\u00E9marrage d'ORBD a \u00E9chou\u00E9 car ORBinitialPort est d\u00E9j\u00E0 utilis\u00E9
orbd.internalexception=\nLe d\u00E9marrage d'ORBD a \u00E9chou\u00E9 en raison d'une exception interne. \nCauses possibles\u00A0: \n1. L'\u00E9l\u00E9ment ORBInitialPort ou ORBActivationPort sp\u00E9cifi\u00E9 est d\u00E9j\u00E0 utilis\u00E9 \n2. Aucune autorisation en \u00E9criture permettant d'\u00E9crire orb.db 

