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

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

