# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

fileResources.base=Le document base {0} n''existe pas ou n''est pas un r\u00e9pertoire lisible
warResources.notWar=Doc base doit point\u00e9 vers un fichier WAR
warResources.invalidWar=Fichier WAR invalide ou illisible  : {0}
jarResources.syntax=Le document base {0} doit commencer par ''jar:'' et finir avec ''!/''
resources.alreadyStarted=Les Ressources ont d\u00e9j\u00e0 \u00e9t\u00e9 d\u00e9marr\u00e9es
resources.connect=Impossible de se connecter au document base {0}
resources.input=Impossible de cr\u00e9er l''input stream pour la ressource {0}
resources.notStarted=Les ressources n''ont pas encore \u00e9t\u00e9 d\u00e9marr\u00e9es
resources.null=Le document base ne peut \u00eatre nul
resources.notFound=La ressource {0} est introuvable
resources.path=Le chemin relatif de context {0} doit commencer par ''/''
resources.alreadyBound=Le nom {0} est d\u00e9j\u00e0 r\u00e9f\u00e9renc\u00e9 par ce contexte
resources.bindFailed=Le liage a \u00e9chou\u00e9: {0}
resources.unbindFailed=Le d\u00e9liage a \u00e9chou\u00e9: {0}
standardResources.alreadyStarted=Les ressources ont d\u00e9ja \u00e9t\u00e9 d\u00e9marr\u00e9es
standardResources.directory=Le file base {0} n''est pas un r\u00e9pertoire
standardResources.exists=Le file base {0} n''existe pas
standardResources.notStarted=Les ressources n''ont pas encore \u00e9t\u00e9 d\u00e9marr\u00e9es
standardResources.null=Le document base ne peut \u00eatre nul
standardResources.slash=Le document base {0} ne doit pas se terminer par un ''/''
