/*
 * 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.
 */

/*
 * Copyright (c) 2009 by Oracle Corporation. All Rights Reserved.
 */

# Messages for message reporting
BadMessageKey = Le message d'erreur correspondant \u00E0 la cl\u00E9 de message est introuvable.
FormatFailed = Une erreur interne est survenue lors du formatage du message suivant :\n  

# Messages for erroneous input
NoFallback = Echec d''un \u00E9l\u00E9ment ''include'' avec l''attribut href ''{0}'' ; aucun \u00E9l\u00E9ment ''fallback'' n''a \u00E9t\u00E9 trouv\u00E9.
MultipleFallbacks = Les [enfants] d'un \u00E9l\u00E9ment 'include' ne doivent pas contenir plusieurs \u00E9l\u00E9ments 'fallback'.
FallbackParent = Un \u00E9l\u00E9ment 'fallback' n'ayant pas l'\u00E9l\u00E9ment 'include' comme parent \u00E9t\u00E9 trouv\u00E9.
IncludeChild = Les \u00E9l\u00E9ments de l''espace de noms ''http://www.w3.org/2001/XInclude'', autres que ''fallback'', ne peuvent pas \u00EAtre des enfants des \u00E9l\u00E9ments ''include''. Cependant, ''{0}'' a \u00E9t\u00E9 trouv\u00E9.
FallbackChild = Les \u00E9l\u00E9ments de l''espace de noms ''http://www.w3.org/2001/XInclude'', autres que ''include'', ne peuvent pas \u00EAtre des enfants des \u00E9l\u00E9ments ''fallback''. Cependant, ''{0}'' a \u00E9t\u00E9 trouv\u00E9.
HrefMissing = L'attribut 'href' d'un \u00E9l\u00E9ment 'include' est manquant.
RecursiveInclude = El\u00E9ment "include" r\u00E9cursif d\u00E9tect\u00E9. Le document ''{0}'' a d\u00E9j\u00E0 \u00E9t\u00E9 trait\u00E9.
InvalidParseValue = Valeur non valide pour l''attribut ''parse'' sur l''\u00E9l\u00E9ment ''include'' : ''{0}''.
XMLParseError = Erreur lors de la tentative d''analyse du fichier XML (href=''{0}''). Raison : {1}
XMLResourceError = Echec de l''op\u00E9ration Include, r\u00E9tablissement de l''\u00E9l\u00E9ment fallback. Erreur de ressource lors de la lecture du fichier en tant que XML (href=''{0}''). Raison : {1}
TextResourceError = Echec de l''op\u00E9ration Include, r\u00E9tablissement de l''\u00E9l\u00E9ment fallback. Erreur de ressource lors de la lecture du fichier en tant que texte (href=''{0}''). Raison : {1}
NO_XPointerSchema = Par d\u00E9faut, le sch\u00E9ma pour \"{0}\" n''est pas pris en charge. D\u00E9finissez votre propre sch\u00E9ma pour {0}. Reportez-vous \u00E0 l''adresse http://apache.org/xml/properties/xpointer-schema
NO_SubResourceIdentified = Aucune sous-ressource n''est identifi\u00E9e par le processeur XPointer pour le pointeur {0}.
NonDuplicateNotation = Plusieurs notations portant le nom ''{0}'' ont \u00E9t\u00E9 utilis\u00E9es, mais elles n''ont pas \u00E9t\u00E9 consid\u00E9r\u00E9es comme des doublons.
NonDuplicateUnparsedEntity = Plusieurs entit\u00E9s non analys\u00E9es portant le nom ''{0}'' ont \u00E9t\u00E9 utilis\u00E9es, mais elles n''ont pas \u00E9t\u00E9 consid\u00E9r\u00E9es comme des doublons.
XpointerMissing = l'attribut xpointer doit \u00EAtre pr\u00E9sent lorsque l'attribut href est absent.
AcceptMalformed = Les caract\u00E8res non compris entre #x20 et #x7E ne sont pas autoris\u00E9s comme valeur de l'attribut 'accept' d'un \u00E9l\u00E9ment 'include'.
AcceptLanguageMalformed = Les caract\u00E8res non compris entre #x20 et #x7E ne sont pas autoris\u00E9s comme valeur de l'attribut 'accept-language' d'un \u00E9l\u00E9ment 'include'.
RootElementRequired = Un document dont le format est correct requiert un \u00E9l\u00E9ment racine.
MultipleRootElements = Un document dont le format est correct ne doit pas contenir plusieurs \u00E9l\u00E9ments racine.
ContentIllegalAtTopLevel = Le remplacement d'un \u00E9l\u00E9ment 'include' affich\u00E9 en tant qu'\u00E9l\u00E9ment de document dans l'ensemble d'information source de niveau sup\u00E9rieur ne doit pas contenir de caract\u00E8res.
UnexpandedEntityReferenceIllegal = Le remplacement d'un \u00E9l\u00E9ment 'include' affich\u00E9 en tant qu'\u00E9l\u00E9ment de document dans l'ensemble d'information source de niveau sup\u00E9rieur ne doit pas contenir de r\u00E9f\u00E9rences d'entit\u00E9 non d\u00E9velopp\u00E9es.
HrefFragmentIdentifierIllegal = Les identificateurs de fragment ne doivent pas \u00EAtre utilis\u00E9s. La valeur d''attribut ''href'' ''{0}'' n''est pas autoris\u00E9e.
HrefSyntacticallyInvalid = La syntaxe de la valeur d''attribut ''href'' ''{0}'' est incorrecte. Apr\u00E8s l''application des r\u00E8gles d''\u00E9chappement, la valeur n''est pas un URI ou un IRI exprim\u00E9 dans une syntaxe correcte.
XPointerStreamability = Un XPointer pointant sur un emplacement de l'ensemble d'information source a \u00E9t\u00E9 indiqu\u00E9. Cet emplacement est inaccessible en raison des caract\u00E9ristiques de transmission en continu du processeur.

XPointerResolutionUnsuccessful = Echec de la r\u00E9solution de XPointer.

# Messages from erroneous set-up
IncompatibleNamespaceContext = Le type de l'\u00E9l\u00E9ment NamespaceContext n'est pas compatible avec l'utilisation de l'\u00E9l\u00E9ment XInclude ; il doit s'agir d'une instance de XIncludeNamespaceSupport
ExpandedSystemId = Impossible de d\u00E9velopper l'ID syst\u00E8me de la ressource incluse
