#
# Copyright (c) 2005, 2014, 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, qui comporte l''API JAX-WS {0}, mais cet outil exige l''API JAX-WS {1}. Utilisez le m\u00e9canisme Endorsed Standards Override Mechanism (http://docs.oracle.com/javase/6/docs/technotes/guides/standards/), ou d\u00e9finissez xendorsed="True" sur <{2}>.

# {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, qui comporte l''API JAX-WS {0}, mais cet outil exige l''API JAX-WS {1}. Utilisez le m\u00e9canisme Endorsed Standards Override Mechanism (http://docs.oracle.com/javase/6/docs/technotes/guides/standards/), ou utilisez l''option -Xendorsed.


#
# 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}
