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

htmlManagerServlet.appsAvailable=Fonctionnelle
htmlManagerServlet.appsName=Nom d''affichage
htmlManagerServlet.appsPath=Chemin
htmlManagerServlet.appsReload=Recharger
htmlManagerServlet.appsUndeploy=Retirer
htmlManagerServlet.appsExpire=Expirer les sessions
htmlManagerServlet.appsSessions=Sessions
htmlManagerServlet.appsStart=D\u00e9marrer
htmlManagerServlet.appsStop=Arr\u00eater
htmlManagerServlet.appsTasks=Commandes
htmlManagerServlet.appsTitle=Applications
htmlManagerServlet.expire.explain=inactives depuis &ge;
htmlManagerServlet.expire.unit=minutes
htmlManagerServlet.helpHtmlManager=Aide HTML Gestionnaire
htmlManagerServlet.helpHtmlManagerFile=../docs/html-manager-howto.html
htmlManagerServlet.helpManager=Aide Gestionnaire
htmlManagerServlet.helpManagerFile=../docs/manager-howto.html
htmlManagerServlet.deployButton=Deployer
htmlManagerServlet.deployConfig=URL du fichier XML de configuration:
htmlManagerServlet.deployPath=Chemin de context (requis):
htmlManagerServlet.deployServer=Emplacement du r\u00e9pertoire ou fichier WAR de d\u00e9ploiement sur le serveur
htmlManagerServlet.deployTitle=Deployer
htmlManagerServlet.deployUpload=Fichier WAR \u00e0 d\u00e9ployer
htmlManagerServlet.deployUploadFail=ECHEC - T\u00e9l\u00e9versement pour d\u00e9ploiement a \u00e9chou\u00e9, exception: {0}
htmlManagerServlet.deployUploadFile=Choisir le fichier WAR \u00e0 t\u00e9l\u00e9verser
htmlManagerServlet.deployUploadInServerXml=ECHEC - Fichier WAR \"{0}\" ne peut \u00eatre t\u00e9l\u00e9vers\u00e9 lorsque le contexte est d\u00e9fini dans server.xml
htmlManagerServlet.deployUploadNotWar=ECHEC - Fichier \u00e0 t\u00e9l\u00e9verser, \"{0}\", doit \u00eatre un .war
htmlManagerServlet.deployUploadNoFile=ECHEC - T\u00e9l\u00e9versement a \u00e9chou\u00e9, aucun fichier
htmlManagerServlet.deployUploadWarExists=ECHEC - Fichier War \"{0}\" d\u00e9j\u00ea existant sur le serveur
htmlManagerServlet.deployWar=URL vers WAR ou r\u00e9pertoire:
htmlManagerServlet.list=Lister les applications
htmlManagerServlet.manager=Gestionnaire
htmlManagerServlet.messageLabel=Message:
htmlManagerServlet.noManager=-
htmlManagerServlet.serverJVMVendor=Fournisseur de la JVM
htmlManagerServlet.serverJVMVersion=Version de la JVM
htmlManagerServlet.serverOSArch=Architecture d''OS
htmlManagerServlet.serverOSName=Nom d''OS
htmlManagerServlet.serverOSVersion=Version d''OS
htmlManagerServlet.serverTitle=Serveur
htmlManagerServlet.serverVersion=Version de serveur
htmlManagerServlet.title=Gestionnaire d''applications WEB Tomcat
managerServlet.alreadyContext=ECHEC - l''application existe d\u00e9j\u00e0 dans le chemin {0}
managerServlet.alreadyDocBase=ECHEC - Le r\u00e9pertoire {0} est d\u00e9j\u00e0 utilis\u00e9
managerServlet.configured=OK - Application configur\u00e9e depuis le fichier contexte {0}
managerServlet.deployed=OK - Application d\u00e9ploy\u00e9e pour le chemin de contexte {0}
managerServlet.deployFailed=ECHEC - Echec au d\u00e9ploiement de l''application pour le chemin de contexte {0}
managerServlet.deployedButNotStarted=ECHEC - Application d\u00e9ploy\u00e9e pour le chemin de contexte {0} mais le d\u00e9marrage du contexte a \u00e9chou\u00e9
managerServlet.exception=ECHEC - L''exception {0} a \u00e9t\u00e9 rencontr\u00e9e
managerServlet.invalidPath=ECHEC - Un chemin de contexte invalide {0} a \u00e9t\u00e9 sp\u00e9cifi\u00e9
managerServlet.invalidWar=ECHEC - Une URL d''application invalide {0} a \u00e9t\u00e9 sp\u00e9cifi\u00e9e
managerServlet.listed=OK - Applications list\u00e9es pour l''h\u00f4te virtuel (virtual host) {0}
managerServlet.listitem={0}:{1}:{2}:{3}
managerServlet.noAppBase=ECHEC - Impossible d''identifier la base de l''application base pour le chemin de contexte {0}
managerServlet.noCommand=ECHEC - Aucune commande n''a \u00e9t\u00e9 sp\u00e9cifi\u00e9e
managerServlet.noContext=ECHEC - Aucun contexte n''existe pour le chemin {0}
managerServlet.noDirectory=ECHEC - La base de document n''est pas un r\u00e9pertoire pour le chemin {0}
managerServlet.noDocBase=ECHEC - Impossible de retirer la base de document pour le chemin {0}
managerServlet.noGlobal=ECHEC - Aucune ressource JNDI globale n''est disponible
managerServlet.noManager=ECHEC - Aucun gestionnaire n''existe pour le chemin {0}
managerServlet.noReload=ECHEC - Rechargement non support\u00e9 par le WAR d\u00e9ploy\u00e9 au chemin {0}
managerServlet.noRename=ECHEC - Impossible de d\u00e9ployer un WAR t\u00e9l\u00e9charg\u00e9 pour le chemin {0}
managerServlet.noRole=ECHEC - L''utilisateur ne poss\u00e8de pas le r\u00f4le {0}
managerServlet.noSelf=ECHEC - Le gestionnaire ne peut se recharger, se retirer, s''arr\u00eater, ou se d\u00e9ployer lui-m\u00eame
managerServlet.noWrapper=Le conteneur n''a pas appel\u00e9 "setWrapper()" pour cette servlet
managerServlet.notDeployed=ECHEC - Le contexte {0} est d\u00e9fini dans server.xml et ne peut \u00eatre retir\u00e9
managerServlet.reloaded=OK - L''application associ\u00e9e au chemin de contexte {0} a \u00e9t\u00e9 recharg\u00e9e
managerServlet.resourcesAll=OK - Liste des ressources globales de tout type
managerServlet.resourcesType=OK - Liste des ressources globales de type {0}
managerServlet.saveFail=ECHEC - La sauvegarde de la configuration a \u00e9chou\u00e9: {0}
managerServlet.saved=OK - Configuration serveur sauvegard\u00e9e
managerServlet.savedContext=OK - Configuration du contexte {0} sauvegard\u00e9e
managerServlet.sessiondefaultmax=Interval par d\u00e9faut de maximum de session inactive {0} minutes
#TODO: Please review the following three messages. These are displayed when "Expire sessions" button is pressed in the Manager webapp:
managerServlet.sessiontimeout={0} minutes: {1} sessions
managerServlet.sessiontimeout.unlimited=unlimited time: {0} sessions
managerServlet.sessiontimeout.expired={0} minutes: {1} sessions were expired
managerServlet.sessions=OK - Information de session pour l''application au chemin de contexte {0}
managerServlet.started=OK - Application d\u00e9marr\u00e9e pour le chemin de contexte {0}
managerServlet.startFailed=ECHEC - L''application pour le chemin de contexte {0} n''a pas pu \u00eatre d\u00e9marr\u00e9e
managerServlet.stopped=OK - Application arr\u00eat\u00e9e pour le chemin de contexte {0}
managerServlet.undeployed=OK - L''application associ\u00e9e au chemin de contexte {0} a \u00e9t\u00e9 retir\u00e9e
managerServlet.startFailed=ECHEC - L''application pour le chemin de contexte {0} n''a pas pu \u00eatre d\u00e9marr\u00e9e
managerServlet.stopped=OK - Application arr\u00eat\u00e9e pour le chemin de contexte {0}
managerServlet.undeployed=OK - Application non d\u00e9ploy\u00e9e pour le chemin de contexte {0}
managerServlet.unknownCommand=ECHEC - Commande inconnue {0}
managerServlet.userDatabaseError=ECHEC - Impossible de r\u00e9soudre la base de donn\u00e9es utilisateurs de r\u00e9f\u00e9rence
managerServlet.userDatabaseMissing=ECHEC - Aucune base de donn\u00e9es utilisateurs n''est disponible

statusServlet.title=Etat du serveur
statusServlet.complete=Etat complet du serveur
