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

wsimport.usage=Syntaxe : {0} [options] <WSDL_URI>\n\nUtilisez "wsimport -help" pour obtenir une description d\u00e9taill\u00e9e des options.

wsimport.help=\nSyntaxe : {0} [options] <WSDL_URI>\n\n\\o\u00f9 [options] incluent :\n\  -b <path>                 indiquez les fichiers de binding jaxws/jaxb ou des sch\u00e9mas suppl\u00e9mentaires\n\                            (Chaque \u00e9l\u00e9ment <path> doit avoir sa propre option -b)\n\  -B<jaxbOption> Transmettez cette option au compilateur de sch\u00e9mas JAXB\n\  -catalog <file>           indiquez le fichier de catalogue pour r\u00e9soudre les r\u00e9f\u00e9rences d''entit\u00e9 externes\n\                            prend en charge le format de catalogue TR9401, XCatalog et OASIS XML.\n\  -d <directory>            indiquez o\u00f9 placer les fichiers de sortie g\u00e9n\u00e9r\u00e9s\n\  -encoding <encoding>      indiquez l''encodage de caract\u00e8res utilis\u00e9s pour les fichiers source\n\  -extension                autorisez les extensions fournisseur - fonctionnalit\u00e9 non indiqu\u00e9e\n\                            par la sp\u00e9cification. L''utilisation d''extensions peut\n\                            aboutir \u00e0 des applications non portables ou\n\                            ne pouvant peut-\u00eatre pas interagir avec d''autres impl\u00e9mentations\n\  -help                     affichez l''aide\n\  -httpproxy:<host>:<port>  indiquez un serveur proxy HTTP (ports 8080 par d\u00e9faut)\n\  -keep                     conservez les fichiers g\u00e9n\u00e9r\u00e9s\n\  -p <pkg>                  indiquez le package cible\n\  -quiet                    supprimez la sortie wsimport\n\  -s <directory>            indiquez o\u00f9 placer les fichiers source g\u00e9n\u00e9r\u00e9s\n\  -target <version>         g\u00e9n\u00e9rez le code conform\u00e9ment \u00e0 la version de sp\u00e9cification JAXWS indiqu\u00e9e\n\                            la valeur par d\u00e9faut est 2.2, les valeurs accept\u00e9es sont 2.0, 2.1 et 2.2\n\                            ex. : 2.0 g\u00e9n\u00e8rera un code conforme \u00e0 la sp\u00e9cification JAXWS 2.0\n\  -verbose                  messages de sortie concernant les actions du compilateur\n\  -version                  imprimez les informations de version\n\  -wsdllocation <location>  valeur @WebServiceClient.wsdlLocation\n\  -clientjar <jarfile>      Cr\u00e9e le fichier JAR des artefacts g\u00e9n\u00e9r\u00e9s ainsi que les\n\                            m\u00e9tadonn\u00e9es WSDL requises pour l''appel du service Web.\n\  -generateJWS              g\u00e9n\u00e9rez le fichier d''impl\u00e9mentation JWS stub\n\  -implDestDir <directory>  indiquez o\u00f9 g\u00e9n\u00e9rer le fichier d''impl\u00e9mentation JWS\n\  -implServiceName <name>   partie locale du nom de service pour l''impl\u00e9mentation JWS g\u00e9n\u00e9r\u00e9e\n\  -implPortName <name>      partie locale du nom de port pour l''impl\u00e9mentation JWS g\u00e9n\u00e9r\u00e9e

wsimport.usage.extensions=\n\\Extensions :\n\  -XadditionalHeaders              mappez les en-t\u00eates non li\u00e9s au message de demande ou de r\u00e9ponse \u00e0 des \n\                                   param\u00e8tres de m\u00e9thode Java\n\  -Xauthfile                       fichier permettant de transporter les informations d'autorisation au format \n\                                   http://username:password@example.org/stock?wsdl\n\  -Xdebug                          imprimez les informations de d\u00e9bogage\n\  -Xno-addressing-databinding      activez le binding de W3C EndpointReferenceType \u00e0 Java\n\  -Xnocompile                      ne compilez pas les fichiers Java g\u00e9n\u00e9r\u00e9s\n\  -XdisableAuthenticator           d\u00e9sactivez l'authentificateur utilis\u00e9 par l''impl\u00e9mentation de r\u00e9f\u00e9rence JAX-WS,\n\                                   l'option -Xauthfile ne sera pas prise en compte si elle est d\u00e9finie\n\  -XdisableSSLHostnameVerification d\u00e9sactivez la v\u00e9rification du nom d'h\u00f4te SSL lors de l'extraction\n\                                   wsdls


wsimport.usage.examples=\n\\Exemples :\n\  wsimport stock.wsdl -b stock.xml -b stock.xjb\n\  wsimport -d a g\u00e9n\u00e9r\u00e9 http://example.org/stock?wsdl\n

wsgen.usage=Syntaxe : {0} [options] <SEI>\n\nUtilisez "wsgen -help" pour obtenir une description d\u00e9taill\u00e9e des options.

wsgen.help=\nSyntaxe : {0} [options] <SEI>\n\n\\o\u00f9 [options] incluent :\n\  -classpath <path>          indiquez o\u00f9 trouver les fichiers de classe d''entr\u00e9e\n\  -cp <path> identique \u00e0 -classpath <path>\n\  -d <directory>             indiquez o\u00f9 placer les fichiers de sortie g\u00e9n\u00e9r\u00e9s\n\  -encoding <encoding>       indiquez l''encodage de caract\u00e8res utilis\u00e9 par les fichiers source\n\  -extension                 autorisez les extensions fournisseur - fonctionnalit\u00e9 non indiqu\u00e9e\n\                             par la sp\u00e9cification. L''utilisation des extensions peut\n\                             aboutir \u00e0 des applications non portables ou\n\ ne pouvant peut-\u00eatre pas interagir avec d''autres impl\u00e9mentations\n\  -help                      affichez l''aide\n\  -keep                      conservez les fichiers g\u00e9n\u00e9r\u00e9s\n\  -r <directory>             r\u00e9pertoire de destination des ressources, indiquez o\u00f9\n\                             placer les fichiers de ressource tels que les WSDL\n\  -s <directory>             indiquez o\u00f9 placer les fichiers source g\u00e9n\u00e9r\u00e9s\n\  -verbose                   messages de sortie concernant les actions du compilateur\n\  -version                   imprimez les informations de version\n\  -wsdl[:protocol]           g\u00e9n\u00e9rez un fichier WSDL. Le protocole est facultatif.\n\                             Les protocoles valides sont {1},\n\                             le protocole par d\u00e9faut est soap1.1.\n\                             Les protocoles non standard {2}\n\                             peuvent \u00eatre utilis\u00e9s uniquement avec\n\                             l''option -extension.\n\  -inlineSchemas             incorporez les sch\u00e9mas dans le WSDL g\u00e9n\u00e9r\u00e9. \n\                             Utilis\u00e9 avec l''option -wsdl.\n\  -servicename <name>        indiquez le nom de service \u00e0 utiliser dans le WSDL g\u00e9n\u00e9r\u00e9\n\                             Utilis\u00e9 avec l''option -wsdl.\n\  -portname <name>           indiquez le nom de port \u00e0 utiliser dans le WSDL g\u00e9n\u00e9r\u00e9\n\                             Utilis\u00e9 avec l''option -wsdl.


wsgen.usage.examples=\n\\Exemples :\n\  wsgen -cp . example.Stock\n\  wsgen -cp . example.Stock -wsdl -servicename '{http://mynamespace}MyService'\n
wrapperTask.needEndorsed=Vous ex\u00E9cutez JDK6 ou une version ult\u00E9rieure, qui est fournie avec l''API JAX-WS {0}, mais cet outil exige l''API JAX-WS {1} ou une version plus r\u00E9cente. Utilisez le m\u00E9canisme Standard Override Mechanism.

# {0}, {2} - version (e.g. 2.1), {1} - absolute class location
wrapperTask.loadingIncorrectApi=Vous \u00eates en train de charger l''API JAX-WS {0} \u00e0 partir de {1}, mais cet outil exige l''API JAX-WS {2}.

invoker.needEndorsed=Vous ex\u00E9cutez JDK6 ou une version ult\u00E9rieure, qui est fournie avec l''API JAX-WS {0}, mais cet outil exige l''API JAX-WS {1} ou une version plus r\u00E9cente. Utilisez le m\u00E9canisme Standard Override Mechanism.


#
# Generic Messages
#
wscompile.invalidOption=param\u00e8tre {0} non reconnu
wsimport.noSuchJaxbOption=aucune option JAXB de ce type : {0}

wscompile.error=erreur : {0}
wscompile.warning=avertissement : {0}
wscompile.info=informations : {0}
wscompile.duplicateOption=option en double : {0}
wscompile.noSuchDirectory=r\u00e9pertoire introuvable : {0}
# wscompile.missingOptionArgument
wscompile.missingOptionArgument=l''option \"{0}\" exige un argument
wscompile.compilationFailed=\u00e9chec de la compilation, les erreurs auraient d\u00fb \u00eatre signal\u00e9es
wscompile.unsupportedEncoding=encodage non pris en charge : {0}

wsimport.missingFile=WSDL_URI manquant

wsgen.invalid.protocol=\"{0}\" n''est pas un protocole pris en charge. Les protocoles pris en charge incluent : {1}.
wsgen.invalid.transport=\"{0}\" n''est pas un transport pris en charge. Les transports pris en charge incluent : {1}.
wsgen.class.not.found=Classe introuvable : \"{0}\"
wsgen.could.not.create.file=Impossible de cr\u00e9er le fichier : \"{0}\"
wsgen.missingFile=interface d'adresse de service manquante
wsgen.soap12.without.extension=Le protocole facultatif \"Xsoap1.2\" doit \u00eatre utilis\u00e9 avec l'option \"-extension\".
wsgen.protocol.without.extension=Le protocole facultatif \"{0}\" doit \u00eatre utilis\u00e9 avec l''option \"-extension\".
wsgen.wsdl.arg.no.genwsdl=L''option \"{0}\" peut \u00eatre associ\u00e9e uniquement \u00e0 l''option "-wsdl".
wsgen.servicename.missing.namespace=Un espace de noms est manquant dans le nom de service \"{0}\".
wsgen.servicename.missing.localname=Un nom local est manquant dans le nom de service \"{0}\".
wsgen.portname.missing.namespace=Un espace de noms est manquant dans le nom de port \"{0}\".
wsgen.portname.missing.localname=Un nom local est manquant dans le nom de port \"{0}\".
wsgen.class.must.be.implementation.class=La classe \"{0}\" n''est pas une classe d''impl\u00e9mentation d''adresse.
wsimport.NotAFileNorURL = "{0}" n''est pas un nom de fichier ni une URL

wsgen.cannot.gen.wsdl.for.non.soap.binding=wsgen ne peut pas g\u00e9n\u00e9rer le WSDL pour le binding non-SOAP {0} sur la classe {1}

wsgen.cannot.gen.wsdl.for.soap12.binding=wsgen ne peut pas g\u00e9n\u00e9rer le WSDL pour le binding SOAP 1.2 {0} sur la classe {1}.\
Please indiquez les commutateurs \"-extension\" et \"-wsdl:protocol XSoap1.2\". Par exemple :\
wsgen -wsdl:protocol XSoap1.2 -extenson {1}
wsgen.inlineSchemas.only.with.wsdl=\"-inlineSchemas\" doit \u00eatre utilis\u00e9 avec l'option \"-wsdl\"

wsgen.no.webservices.class=wsgen n''a trouv\u00e9 aucune classe avec l''annotation @WebService. Indiquez une annotation @WebService sur {0}.

wsimport.no.wsdl=Echec de la lecture du document WSDL {0} pour les raisons suivantes : 1) Le document est introuvable ; 2) Le document n''a pas pu \u00eatre lu ; 3) L''\u00e9l\u00e9ment racine du document n''est pas <wsdl:definitions>.

wsimport.FailedToParse = Echec de l''analyse de "{0}" : {1}

wsimport.ParsingWSDL=analyse du WSDL...\n\n
wsimport.GeneratingCode=\nG\u00e9n\u00e9ration du code...\n
wsimport.CompilingCode=\nCompilation du code...\n
wsimport.ILLEGAL_TARGET_VERSION = "{0}" n''est pas une version cible valide. Les versions "2.0" et "2.1" sont prises en charge.

wsimport.ILLEGAL_AUTH_INFO = "{0}" n''est pas un format d''informations d''autorisation valide. Le format est http[s]://user:password@host:port//<url-path>.

wsimport.readingAuthFile = Tentative de lecture d''un fichier d''autorisation : "{0}"...

# {0} - path to current authorization file, {1} - path to metro authorization file
wsimport.authFileNotFound = Fichier d''autorisation "{0}" introuvable. Si l''acc\u00e8s WSDL n\u00e9cessite une authentification de base, fournissez un fichier d''autorisation avec un acc\u00e8s en lecture \u00e0 {1} ou utilisez -Xauthfile pour donner le fichier d''autorisation et fournir sur chaque ligne les informations d''autorisation \u00e0 l''aide du format suivant : http[s]://user:password@host:port//<url-path>

# {0} - exception message, {1} - systemId (e.g. location of WSDL file) , {2} - path to metro authentication file e.g.: Server returned HTTP response code: 401 for URL: http://localhost:8080/myServer/mywebService?WSDL, "http://localhost:8080/myServer/mywebService?WSDL" needs authorization, please provide authorization file with read access at C:\Documents and Settings\user\.metro\auth or use -Xauthfile to give the authorization file and on each line provide authorization information using this format : http[s]://user:password@host:port//
wsimport.authInfoNeeded = {0}, "{1}" n\u00e9cessite une autorisation, fournissez un fichier d''autorisation avec un acc\u00e8s en lecture \u00e0 {2} ou utilisez -Xauthfile pour donner le fichier d''autorisation et fournir sur chaque ligne les informations d''autorisation \u00e0 l''aide du format suivant : http[s]://user:password@host:port//<url-path>

wsimport.AUTH_INFO_LINENO = ligne {0} sur {1}


wsimport.ErrorMessage = [ERROR] {0}

wsimport.WarningMessage = [WARNING] {0}

wsimport.InfoMessage = [INFO] {0}

wsimport.DebugMessage = [DEBUG] {0}

wsimport.httpRedirect = Le serveur a renvoy\u00e9 le code de statut HTTP : "{0}", nouvelle tentative avec "{1}"

wsimport.maxRedirectAttempt = Impossible d'obtenir un WSDL, nombre maximal de r\u00e9acheminements (5) atteint

wsimport.wsdllocation.clientjar = wsdlLocation ne peut pas \u00eatre indiqu\u00e9 lors de l'utilisation de l'option clientJar
# {0} - path to a zip file
wsimport.archivingArtifacts=\nArchivage des artefacts g\u00e9n\u00e9r\u00e9s dans {0}.\n
wsimport.archiveArtifact=Ajout de {0} \u00e0 l''archive {1}
wsimport.fetchingMetadata=\nT\u00e9l\u00e9chargement du WSDL et des m\u00e9tadonn\u00e9es associ\u00e9es\n
# {0} - URI, {1} - path to a file
wsimport.document.download=\nT\u00e9l\u00e9chargement du document de m\u00e9tadonn\u00e9es de {0} vers {1}
