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

# $Id: LocalStrings_fr.properties,v 1.1 2011/06/28 21:08:20 rherrmann Exp $

# language

# package org.apache.catalina.realm

jaasRealm.accountExpired=le nom d''utilisateur {0} N''A PAS \u00e9t\u00e9 authentifi\u00e9 car le compte a expir\u00e9
jaasRealm.authenticateSuccess=le nom d''utilisateur {0} a \u00e9t\u00e9 authentifi\u00e9 avec succ\u00e8s
jaasRealm.credentialExpired=le nom d''utilisateur {0} N''A PAS \u00e9t\u00e9 authentifi\u00e9 car son cr\u00e9dit a expir\u00e9 (expired credential)
jaasRealm.failedLogin=le nom d''utilisateur {0} N''A PAS \u00e9t\u00e9 authentifi\u00e9 car son contr\u00f4le d''acc\u00e8s (login) a \u00e9chou\u00e9
jaasRealm.loginException=Exception lors de l''authentification par login du nom d''utilisateur {0}
jdbcRealm.authenticateFailure=le nom d''utilisateur {0} N''A PAS \u00e9t\u00e9 authentifi\u00e9
jdbcRealm.authenticateSuccess=le nom d''utilisateur {0} a \u00e9t\u00e9 authentifi\u00e9 avec succ\u00e8s
jdbcRealm.close=Exception lors de la fermeture de la connexion \u00e0 la base de donn\u00e9es
jdbcRealm.exception=Exception pendant le traitement de l''authentification
jdbcRealm.open=Exception lors de l''ouverture de la base de donn\u00e9es
jndiRealm.authenticateFailure=Le nom d''utilisateur {0} N''A PAS \u00e9t\u00e9 authentifi\u00e9
jndiRealm.authenticateSuccess=Le nom d''utilisateur {0} a \u00e9t\u00e9 authentifi\u00e9 avec succ\u00e8s
jndiRealm.close=Exception lors de la fermeture de la connexion au serveur d''acc\u00e8s (directory server)
jndiRealm.exception=Exception pendant le traitement de l''authentification
jndiRealm.open=Exception lors de l''ouverture de la connexion au serveur d''acc\u00e8s (directory server)
memoryRealm.authenticateFailure=le nom d''utilisateur {0} N''A PAS \u00e9t\u00e9 authentifi\u00e9
memoryRealm.authenticateSuccess=le nom d''utilisateur {0} a \u00e9t\u00e9 authentifi\u00e9 avec succ\u00e8s
memoryRealm.loadExist=Le fichier base de donn\u00e9es m\u00e9moire (memory database) {0} ne peut \u00eatre lu
memoryRealm.loadPath=Chargement des utilisateurs depuis le fichier base de donn\u00e9es m\u00e9moire (memory database) {0}
memoryRealm.readXml=Exception lors de la lecture du fichier base de donn\u00e9es m\u00e9moire (memory database)
realmBase.algorithm=L''algorithme d''empreinte de message (message digest) {0} indiqu\u00e9 est invalide
realmBase.alreadyStarted=Ce royaume (Realm) a d\u00e9j\u00e0 \u00e9t\u00e9 d\u00e9marr\u00e9
realmBase.digest=Erreur lors du traitement des empreintes (digest) des cr\u00e9dits utilisateur (user credentials)
realmBase.forbidden=L''acc\u00e8s \u00e0 la ressource demand\u00e9e a \u00e9t\u00e9 interdit
realmBase.hasRoleFailure=Le nom d''utilisateur {0} N''A PAS de r\u00f4le {1}
realmBase.hasRoleSuccess=Le nom d''utilisateur {0} a pour r\u00f4le {1}
realmBase.notAuthenticated=Erreur de configuration:  Impossible de conduire un contr\u00f4le d''acc\u00e8s sans un principal authentifi\u00e9 (authenticated principal)
realmBase.notStarted=Ce royaume (Realm) n''a pas encore \u00e9t\u00e9 d\u00e9marr\u00e9
realmBase.authenticateFailure=Le nom d''utilisateur {0} N''A PAS \u00e9t\u00e9 authentifi\u00e9
realmBase.authenticateSuccess=Le nom d''utilisateur {0} a \u00e9t\u00e9 authentifi\u00e9 avec succ\u00e8s
userDatabaseRealm.authenticateError=Erreur de configuration du contr\u00f4le d''acc\u00e8s (login) lors de l''authentification du nom d''utilisateur {0}
userDatabaseRealm.lookup=Exception lors de la recherche dans la base de donn\u00e9es utilisateurs avec la cl\u00e9 {0}
userDatabaseRealm.noDatabase=Aucun composant base de donn\u00e9es utilisateurs trouv\u00e9 pour la cl\u00e9 {0}
userDatabaseRealm.noEngine=Aucun composant moteur (engine component) trouv\u00e9 dans la hi\u00e9rarchie des conteneurs
userDatabaseRealm.noGlobal=Aucune ressource globale JNDI trouv\u00e9e
