#
# Copyright (c) 1997-2018 Oracle and/or its affiliates. All rights reserved.
# Copyright 2004 The Apache Software Foundation
#
# Licensed 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.
#


#
# Message IDs reserved for this file: PWC3710-PWC3979
#
accessLogValve.alreadyStarted=PWC3710: Access Logger has already been started
accessLogValve.notStarted=PWC3711: Access Logger has not yet been started

# Error report valve
errorReportValve.errorReport=Error report
errorReportValve.statusHeader=HTTP Status {0} - {1}
errorReportValve.exceptionReport=Exception report
errorReportValve.statusReport=Status report
errorReportValve.message=message
errorReportValve.description=description
errorReportValve.exception=exception
errorReportValve.rootCause=root cause
errorReportValve.note=note
errorReportValve.rootCauseInLogs=The full stack traces of the exception and its root causes are available in the {0} logs.

# HTTP status reports
# All status codes registered with IANA can be found at
# http://www.iana.org/assignments/http-status-codes/http-status-codes.xml
# The list might be kept in sync with the one in
# org/apache/tomcat/util/http/res/LocalStrings.properties.
http.100=The client may continue.
http.101=The server is switching protocols according to the "Upgrade" header.
http.102=The server has accepted the complete request, but has not yet completed it.
http.201=The request succeeded and a new resource has been created on the server.
http.202=This request was accepted for processing, but has not been completed.
http.203=The meta information presented by the client did not originate from the server.
http.204=The request succeeded but there is no information to return.
http.205=The client should reset the document view which caused this request to be sent.
http.206=The server has fulfilled a partial GET request for this resource.
http.207=Multiple status values have been returned.
http.208=This collection binding was already reported.
http.226=The response is a representation of the result of one or more instance-manipulations applied to the current instance.
http.300=The requested resource corresponds to any one of a set of representations, each with its own specific location.
http.301=The requested resource has moved permanently to a new location.
http.302=The requested resource has moved temporarily to a new location.
http.303=The response to this request can be found under a different URI.
http.304=The requested resource is available and has not been modified.
http.305=The requested resource must be accessed through the proxy given by the "Location" header.
http.307=The requested resource resides temporarily under a different URI.
http.308=The target resource has been assigned a new permanent URI and any future references to this resource SHOULD use one of the returned URIs.
http.400=The request sent by the client was syntactically incorrect.
http.401=This request requires HTTP authentication.
http.402=Payment is required for access to this resource.
http.403=Access to the specified resource has been forbidden.
http.404=The requested resource is not available.
http.405=The specified HTTP method is not allowed for the requested resource.
http.406=The resource identified by this request is only capable of generating responses with characteristics not acceptable according to the request "accept" headers.
http.407=The client must first authenticate itself with the proxy.
http.408=The client did not produce a request within the time that the server was prepared to wait.
http.409=The request could not be completed due to a conflict with the current state of the resource.
http.410=The requested resource is no longer available, and no forwarding address is known.
http.411=This request cannot be handled without a defined content length.
http.412=A specified precondition has failed for this request.
http.413=The request entity is larger than the server is willing or able to process.
http.414=The server refused this request because the request URI was too long.
http.415=The server refused this request because the request entity is in a format not supported by the requested resource for the requested method.
http.416=The requested byte range cannot be satisfied.
http.417=The expectation given in the "Expect" request header could not be fulfilled.
http.422=The server understood the content type and syntax of the request but was unable to process the contained instructions.
http.423=The source or destination resource of a method is locked.
http.424=The method could not be performed on the resource because the requested action depended on another action and that action failed.
http.426=The request can only be completed after a protocol upgrade.
http.428=The request is required to be conditional.
http.429=The user has sent too many requests in a given amount of time.
http.431=The server refused this request because the request header fields are too large.
http.500=The server encountered an internal error that prevented it from fulfilling this request.
http.501=The server does not support the functionality needed to fulfill this request.
http.502=This server received an invalid response from a server it consulted when acting as a proxy or gateway.
http.503=The requested service is not currently available.
http.504=The server received a timeout from an upstream server while acting as a gateway or proxy.
http.505=The server does not support the requested HTTP protocol version.
http.506=The chosen variant resource is configured to engage in transparent content negotiation itself, and is therefore not a proper end point in the negotiation process.
http.507=The resource does not have sufficient space to record the state of the resource after execution of this method.
http.508=The server terminated an operation because it encountered an infinite loop.
http.510=The policy for accessing the resource has not been met in the request.
http.511=The client needs to authenticate to gain network access.
