#
# 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 JAXP Validation API 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 du formatage du message suivant :\n

# SchemaFactory error messages
SchemaLanguageNull = La langue de sch\u00E9ma indiqu\u00E9e ne peut pas \u00EAtre NULL.
SchemaLanguageLengthZero = La longueur de la langue de sch\u00E9ma indiqu\u00E9e ne peut \u00EAtre de z\u00E9ro caract\u00E8re.
SchemaSourceArrayNull = Le param\u00E8tre de tableau source ne peut pas \u00EAtre NULL.
SchemaSourceArrayMemberNull = Le param\u00E8tre de tableau source ne peut pas contenir d'\u00E9l\u00E9ment NULL.
SchemaFactorySourceUnrecognized = Le param\u00E8tre source de type ''{0}'' n''est pas reconnu par cet \u00E9l\u00E9ment SchemaFactory.

# Validator error messages
SourceParameterNull = Le param\u00E8tre source ne peut pas \u00EAtre NULL.
SourceNotAccepted = Le param\u00E8tre source de type ''{0}'' n''est pas accept\u00E9 par ce valideur.
SourceResultMismatch = Le param\u00E8tre source de type ''{0}'' n''est pas compatible avec le param\u00E8tre de r\u00E9sultat de type ''{1}''.

# TypeInfoProvider error messages
TypeInfoProviderIllegalState = Un \u00E9l\u00E9ment TypeInfoProvider ne peut pas \u00EAtre interrog\u00E9 en dehors d'un callback startElement.

# General error messages
FeatureNameNull = Le nom de fonctionnalit\u00E9 ne peut pas \u00EAtre NULL.
ProperyNameNull = Le nom de propri\u00E9t\u00E9 ne peut pas \u00EAtre NULL.
SAXSourceNullInputSource = L'\u00E9l\u00E9ment SAXSource indiqu\u00E9 ne contient aucun \u00E9l\u00E9ment InputSource.

