# 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.
#
# CoyoteConnector
coyoteConnector.protocolHandlerDestroyFailed = Fall\u00F3 la destrucci\u00F3n del manejador de protocolo
coyoteConnector.protocolHandlerInitializationFailed = Fall\u00F3 la inicializaci\u00F3n del manejador de protocolo
coyoteConnector.protocolHandlerInstantiationFailed = Fall\u00F3 la instanciaci\u00F3n del manejador de protocolo
coyoteConnector.protocolHandlerStartFailed = Fall\u00F3 el arranque del manejador de protocolo
coyoteConnector.protocolHandlerPauseFailed = Ha fallado la pausa del manejador de protocolo
coyoteConnector.protocolHandlerResumeFailed = Ha fallado el rearranque del manejador de protocolo
coyoteConnector.parseBodyMethodNoTrace = El m\u00E9todo TRACE NO DEBE DE incluir una entidad (vea RFC 2616 Secci\u00F3n 9.6)
#
# CoyoteAdapter
coyoteAdapter.parsePathParam = No puedo analizar los par\u00E1metros de ruta mediante la codificaci\u00F3n [{0}]. Se ignoran los par\u00E1metros de la URL.
coyoteAdapter.debug = La variable [{0}] tiene el valor [{1}]
coyoteAdapter.accesslogFail = Excepci\u00F3n al intentar a\u00F1adir una entrada al historial de acceso
#
# CoyoteResponse
coyoteResponse.getOutputStream.ise = getWriter() ya ha sido llamado para esta respuesta
coyoteResponse.getWriter.ise = getOutputStream() ya ha sido llamado para esta respuesta
coyoteResponse.resetBuffer.ise = No puedo limpiar el b\u00FAfer despu\u00E9s de que la repuesta ha sido llevada a cabo
coyoteResponse.sendError.ise = No puedo llamar a sendError() tras llevar a cabo la respuesta
coyoteResponse.sendRedirect.ise = No puedo llamar a sendRedirect() tras llevar a cabo la respuesta
coyoteResponse.setBufferSize.ise = No puedo cambiar la medida del b\u00FAfer tras escribir los datos
#
# CoyoteRequest
coyoteRequest.getInputStream.ise = getReader() ya ha sido llamado para este requerimiento
coyoteRequest.getReader.ise = getInputStream() ya ha sido llamado para este requerimiento
coyoteRequest.sessionCreateCommitted = No puedo crear una sesi\u00F3n despu\u00E9s de llevar a cabo la respueta
coyoteRequest.setAttribute.namenull = No pudeo llamar a setAttribute con un nombre nulo
coyoteRequest.attributeEvent = Excepci\u00F3n lanzada mediante el escuchador de eventos de atributos
coyoteRequest.parseParameters = Excepci\u00F3n lanzada al procesar par\u00E1metros POST
coyoteRequest.postTooLarge = No se analizaron los par\u00E1metros porque la medida de los datos enviados era demasiado grande. Usa el atributo maxPostSize del conector para resolver esto en caso de que la aplicaci\u00F3n debiera de aceptar POSTs m\u00E1s grandes.
coyoteRequest.chunkedPostTooLarge = No se han analizado los par\u00E1metros porque la medida de los datos enviados meiante "post" era demasiado grande. Debido a que este requerimiento es una parte del original, no puede ser procesado. Utiliza el atributo "maxPostSize" del conector para resolver esta situaci\u00F3n, en caso de que la aplicaci\u00F3n deba de aceptar POSTs mayores.
coyoteRequest.alreadyAuthenticated = Este requerimiento ya ha sido autenticado
coyoteRequest.noLoginConfig = No se ha configurado mecanismo de autenticaci\u00F3n para este contexto
coyoteRequest.authenticate.ise = No puedo llamar a authenticate() tras haberse acometido la respuesta
coyoteRequest.uploadLocationInvalid = No es v\u00E1lida la localizaci\u00F3n [{0}] de carga temporal
coyoteRequest.sessionEndAccessFail = Excepci\u00F3n disparada acabando acceso a sesi\u00F3n mientras se reciclaba el requerimiento
requestFacade.nullRequest = El objeto de requerimiento ha sido reciclado y ya no est\u00E1 asociado con esta fachada
responseFacade.nullResponse = El objeto de respuesta ha sido reciclado y ya no est\u00E1 asociado con esta fachada
cometEvent.nullRequest = El objeto de evento ha sido reciclado y ya no est\u00E1 asociado con este requerimiento
mapperListener.unknownDefaultHost = M\u00E1quina por defecto desconocida\: {0} para el conector [{1}]
mapperListener.registerHost = Registrar m\u00E1quina {0} en dominio {1} para el conector [{2}]
mapperListener.unregisterHost = Desregistrar m\u00E1quina {0} en dominio {1} para el conector [{2}]

inputBuffer.streamClosed = Flujo cerrado
