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

# This file stores localized messages for the Xerces XPointer implementation.
#
# The messages are arranged in key and value tuples in a ListResourceBundle.

# 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 de la mise en forme du message suivant :\n  

# XPointer Framework Error Messages
XPointerProcessingError = XPointerProcessingError : une erreur est survenue lors du traitement de l'expression XPointer.
InvalidXPointerToken = InvalidXPointerToken : l''expression XPointer contient le jeton non valide ''{0}''
InvalidXPointerExpression = InvalidXPointerExpression : l''expression XPointer ''{0}'' n''est pas valide.
MultipleShortHandPointers = MultipleShortHandPointers : l''expression XPointer ''{0}'' n''est pas valide. Elle contient plusieurs pointeurs ShortHand. 
SchemeDataNotFollowedByCloseParenthesis = SchemeDataNotFollowedByCloseParenthesis : l''expression XPointer ''{0}'' n''est pas valide. L''\u00E9l\u00E9ment SchemeData n''est pas suivi d''un caract\u00E8re '')''. 
SchemeUnsupported = SchemeUnsupported : le processus XPointer ''{0}'' n''est pas pris en charge.
InvalidShortHandPointer = InvalidShortHandPointer : le NCName du pointeur ShortHand ''{0}'' n''est pas valide.
UnbalancedParenthesisInXPointerExpression = UnbalancedParenthesisInXPointerExpression : l''expression XPointer ''{0}'' n''est pas valide. Le nombre de parenth\u00E8ses ouvrantes ''{1}'' est diff\u00E9rent du nombre de parenth\u00E8ses fermantes ''{2}''.
InvalidSchemeDataInXPointer = InvalidSchemeDataInXPointer : l''expression XPointer ''{0}'' contient un \u00E9l\u00E9ment SchemeData non valide.

# XPointer Element Scheme Error Messages
InvalidElementSchemeToken = InvalidElementSchemeToken : l''expression XPointer du processus element() contient le jeton non valide ''{0}''
InvalidElementSchemeXPointer = InvalidElementSchemeXPointer : l''expression XPointer de processus d''\u00E9l\u00E9ment ''{0}'' n''est pas valide.
XPointerElementSchemeProcessingError = XPointerElementSchemeProcessingError : une erreur est survenue lors du traitement de l'expression de processus element() XPointer.
InvalidNCNameInElementSchemeData = InvalidNCNameInElementSchemeData : le processus element() contient un pointeur ShortHand ''{0}'' avec un NCName non valide.
InvalidChildSequenceCharacter = InvalidChildSequenceCharacter : le processus element() contient un caract\u00E8re de s\u00E9quence enfant non valide ''{0}''. 
