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

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

helloworld.title=Ola Mundo!

requestinfo.title=Exemplo da Informacao do Pedido
requestinfo.label.method=Metodo:
requestinfo.label.requesturi=URI do Pedido:
requestinfo.label.protocol=Protocolo:
requestinfo.label.pathinfo=Informacao do Caminho:
requestinfo.label.remoteaddr=Endereco Remoto:

requestheader.title=Exemplo da Cebeceira do Pedido

requestparams.title=Examplo de Parametros do Pedido
requestparams.params-in-req=Parametros neste pedido:
requestparams.no-params=Sem Parametros, Por favor entre alguns
requestparams.firstname=Primeiro Nome:
requestparams.lastname=Apelido:

cookies.title=CExamplo de Cookies
cookies.cookies=O se browser esta a enviar os seguintes cookies:
cookies.no-cookies=O seu browser nao esta a enviar nenhuns cookies
cookies.make-cookie=Crie um cookie para enviar para o seu browser
cookies.name=Nome:
cookies.value=Valor:
cookies.set=Acabou de enviar o seguinte cookie para o seu browser:

sessions.title=Examplo de sessoes
sessions.id=Identificador da Sessao:
sessions.created=Criada:
sessions.lastaccessed=Ultima vez acedida:
sessions.data=Os seguintes dados fazem parte da sua sessao:
sessions.adddata=Adicione data a sua sessao
sessions.dataname=Nome do atributo da sessao:
sessions.datavalue=Valor do atributo da Sessao:
