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

# Default localized resources for example servlets
# This locale is fr_FR

helloworld.title=Salut le Monde!

requestinfo.title=Exemple d''information sur la requ\u00eate
requestinfo.label.method=M\u00e9thode:
requestinfo.label.requesturi=URI de requ\u00eate:
requestinfo.label.protocol=Protocole:
requestinfo.label.pathinfo=Info de chemin:
requestinfo.label.remoteaddr=Adresse distante:

requestheader.title=Exemple d''information sur les ent\u00eate de requ\u00eate

requestparams.title=Exemple de requ\u00eate avec param\u00eatres
requestparams.params-in-req=Param\u00eatres dans la requ\u00eate:
requestparams.no-params=Pas de param\u00eatre, merci dans saisir quelqu'uns
requestparams.firstname=Pr\u00e9nom:
requestparams.lastname=Nom:

cookies.title=Exemple d''utilisation de Cookies
cookies.cookies=Votre navigateur retourne les cookies suivant:
cookies.no-cookies=Votre navigateur ne retourne aucun cookie
cookies.make-cookie=Cr\u00e9ation d''un cookie \u00e0 retourner \u00e0 votre navigateur
cookies.name=Nom:
cookies.value=Valeur:
cookies.set=Vous venez d''envoyer le cookie suivant \u00e0 votre navigateur:

sessions.title=Exemple de Sessions
sessions.id=ID de Session:
sessions.created=Cr\u00e9e le:
sessions.lastaccessed=Dernier acc\u00e8s:
sessions.data=Les donn\u00e9es existantes dans votre session:
sessions.adddata=Ajouter des donn\u00e9es \u00e0 votre session
sessions.dataname=Nom de l''Attribut de Session:
sessions.datavalue=Valeur de l''Attribut de Session:
