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

# Do not edit this file directly.
# To edit translations see: https://tomcat.apache.org/getinvolved.html#Translations

cookies.cookies=あなたののブラウザから次のCookieが送信されています：
cookies.make-cookie=ブラウザへ送信する cookie を作成します。
cookies.name=Name:
cookies.no-cookies=あなたのブラウザはクッキーを送信していません。
cookies.set=ブラウザに cookie を送信しました。
cookies.title=Cookie 例
cookies.value=値：

helloworld.title=Hello World!

requestheader.title=リクエストヘッダ例

requestinfo.label.method=メソッド：
requestinfo.label.pathinfo=パス情報：
requestinfo.label.protocol=プロトコル：
requestinfo.label.remoteaddr=リモートアドレス：
requestinfo.label.requesturi=Request URI:
requestinfo.title=リクエスト情報例

requestparams.firstname=First Name:
requestparams.lastname=Last Name:
requestparams.no-params=パラメータがありません。何か入力してください。
requestparams.params-in-req=このリクエストのパラメータ：
requestparams.title=リクエストパラメータ例

sessions.adddata=セッションにデータを追加します
sessions.created=作成：
sessions.data=あなたのセッションには次のデータがあります：
sessions.dataname=セッション属性名：
sessions.datavalue=セッション属性の値：
sessions.id=セッションID
sessions.lastaccessed=最終アクセス：
sessions.title=セッション例
