# 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.
webappClassLoader.illegalJarPath = Detectada entrada ilegal de JAR con nombre {0}
webappClassLoader.jdbcRemoveFailed = Ha fallado el desregistro del conductor JDBC para la aplicaci\u00F3n web [{0}]
webappClassLoader.stopped = Acceso ilegal\: esta instancia de aplicaci\u00F3n web ya ha sido parada.  Could not load {0}.  La eventual traza de pila que sigue ha sido motivada por un error lanzado con motivos de depuraci\u00F3n as\u00ED como para intentar terminar el hilo que motiv\u00F3 el acceso ilegal y no tiene impacto funcional.
webappClassLoader.readError = Error de lectura de recurso\: No pude cargar {0}.
webappClassLoader.clearJdbc = La aplicaci\u00F3n web [{0}] registr\u00F3 el conductor JDBC [{1}] pero fall\u00F3 al anular el registro mientras la aplicaci\u00F3n web estaba parada. Para prevenir un fallo de memoria, se ha anulado el registro del conductor JDBC por la fuerza.
webappClassLoader.clearReferencesResourceBundlesCount = Quitadas las referencias del Resourcebundle  [{0}] desde la cach\u00E9 para la aplicaci\u00F3n web [{1}]
webappClassLoader.clearReferencesResourceBundlesFail = No puede limpiar las referencisa de ResourceBundle para la aplicaci\u00F3n web [{0}]
webappClassLoader.clearRmiInfo = No pude hallar la clase sun.rmi.transport.Target para limpiar el cargador de contexto de clase para la aplicaci\u00F3n web [{0}]. Esto es lo esperado em m\u00E1quinas que no son de Sun.
webappClassLoader.clearRmiFail = No pude limpiar el cargador del contexto de clase referenciado desde sun.rmi.transport.Target para la aplicaci\u00F3n web [{0}]
webappClassLoader.checkThreadLocalsForLeaks.badKey = No puedo determinar la representaci\u00F3n de cadena de la clave del tipo  [{0}]
webappClassLoader.checkThreadLocalsForLeaks.badValue = No puedo determinar la representaci\u00F3n de cadena del valor del tipo  [{0}]
webappClassLoader.checkThreadLocalsForLeaks.unknown = Desconocido
webappClassLoader.checkThreadLocalsForLeaks = La aplicaci\u00F3n web [{0}] cre\u00F3 un ThreadLocal con clave del tipo [{1}] (valor [{2}]) y un valor del tipo [{3}] (valor [{4}]) pero no pudo quitarlo cuando la aplicaci\u00F3n web se par\u00F3. Los hilos se van a renovar con el tiempo para intentar evitar in posible fallo de memoria.
webappClassLoader.checkThreadLocalsForLeaksNull = La aplicaci\u00F3n web [{0}] cre\u00F3 un ThreadLocal con clave del tipo [{1}] (valor [{2}]). El Threadlocal ha sido puesto correctamente a nulo y la clave ser\u00E1 qutada por el GC.
webappClassLoader.checkThreadLocalsForLeaksFail = No pude revisar las referencias a ThreadLocal para la aplicaci\u00F3n web  [{0}]
webappClassLoader.checkThreadsHttpClient = Hallado hilo keep-alive de HttpClient usando cargador de clase de aplicaci\u00F3n web. Fijado por el hilo de conmutaci\u00F3n al cargador de la clase padre.
webappClassLoader.stopThreadFail = No pude terminar el hilo con nombre [{0}] para la aplicaci\u00F3n web [{1}]
webappClassLoader.stopTimerThreadFail = No pude terminar TimerThread con nombre [{0}] para la aplicaci\u00F3n web [{1}]
webappClassLoader.validationErrorJarPath = no pude validar entrada JAR con nombre {0}
webappClassLoader.warnTimerThread = La aplicaci\u00F3n web [{0}] parece haber arrancado un TimerThread con nombre [{1}] v\u00EDa de la API java.util.Timer, pero no ha podido pararlo. Para prevenir un fallo de memoria, el cron\u00F3metro (y el hilo asociado) hasido cancelado a la fuerza.
webappClassLoader.wrongVersion = (no puedo cargar clase {0})
webappLoader.deploy = Desplegando repositorios de clase en directorio de trabajo {0}
webappLoader.jarDeploy = Despliegue del JAR {0} en {1}
webappLoader.classDeploy = Despliegue de archivos de clase {0} en {1}
webappLoader.reloadable = No puedo poner la propiedad recargable a {0}
webappLoader.starting = Arrancando este Cargador
webappLoader.stopping = Parando este Cargador
webappLoader.copyFailure = No pude copiar los recursos
webappLoader.mkdirFailure = No pude crear directorio de destino para copiar los recursos
