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

htmlManagerServlet.appsAvailable=Running
htmlManagerServlet.appsName=Display Name
htmlManagerServlet.appsPath=Path
htmlManagerServlet.appsReload=Reload
htmlManagerServlet.appsUndeploy=Undeploy
htmlManagerServlet.appsVersion=Version
htmlManagerServlet.appsExpire=Expire sessions
htmlManagerServlet.appsSessions=Sessions
htmlManagerServlet.appsStart=Start
htmlManagerServlet.appsStop=Stop
htmlManagerServlet.appsTasks=Commands
htmlManagerServlet.appsTitle=Applications
htmlManagerServlet.noVersion=None specified
htmlManagerServlet.expire.explain=with idle &ge;
htmlManagerServlet.expire.unit=minutes
htmlManagerServlet.helpHtmlManager=HTML Manager Help
htmlManagerServlet.helpHtmlManagerFile=../docs/html-manager-howto.html
htmlManagerServlet.helpManager=Manager Help
htmlManagerServlet.helpManagerFile=../docs/manager-howto.html
htmlManagerServlet.deployButton=Deploy
htmlManagerServlet.deployConfig=XML Configuration file URL:
htmlManagerServlet.deployPath=Context Path (required):
htmlManagerServlet.deployServer=Deploy directory or WAR file located on server
htmlManagerServlet.deployTitle=Deploy
htmlManagerServlet.deployUpload=WAR file to deploy
htmlManagerServlet.deployUploadFail=FAIL - Deploy Upload Failed, Exception: {0}
htmlManagerServlet.deployUploadFile=Select WAR file to upload
htmlManagerServlet.deployUploadInServerXml=FAIL - War file \"{0}\" cannot be uploaded if context is defined in server.xml
htmlManagerServlet.deployUploadNotWar=FAIL - File uploaded \"{0}\" must be a .war
htmlManagerServlet.deployUploadNoFile=FAIL - File upload failed, no file
htmlManagerServlet.deployUploadWarExists=FAIL - War file \"{0}\" already exists on server
htmlManagerServlet.deployWar=WAR or Directory URL:
htmlManagerServlet.diagnosticsLeak=Check to see if a web application has caused a memory leak on stop, reload or undeploy
htmlManagerServlet.diagnosticsLeakButton=Find leaks
htmlManagerServlet.diagnosticsLeakWarning=This diagnostic check will trigger a full garbage collection. Use it with extreme caution on production systems.
htmlManagerServlet.diagnosticsSsl=SSL connector configuration diagnostics
htmlManagerServlet.diagnosticsSslConnectorCipherButton=Connector ciphers
htmlManagerServlet.diagnosticsSslConnectorCipherText=List the configured ciphers for each connector
htmlManagerServlet.diagnosticsTitle=Diagnostics
htmlManagerServlet.findleaksList=\
  The following web applications were stopped (reloaded, undeployed), but their\n\
  classes from previous runs are still loaded in memory, thus causing a memory\n\
  leak (use a profiler to confirm):\n
htmlManagerServlet.findleaksNone=No web applications appear to have triggered a memory leak on stop, reload or undeploy.
htmlManagerServlet.list=List Applications
htmlManagerServlet.manager=Manager
htmlManagerServlet.messageLabel=Message:
htmlManagerServlet.noManager=-
htmlManagerServlet.serverHostname=Hostname
htmlManagerServlet.serverIPAddress=IP Address
htmlManagerServlet.serverJVMVendor=JVM Vendor
htmlManagerServlet.serverJVMVersion=JVM Version
htmlManagerServlet.serverOSArch=OS Architecture
htmlManagerServlet.serverOSName=OS Name
htmlManagerServlet.serverOSVersion=OS Version
htmlManagerServlet.serverTitle=Server Information
htmlManagerServlet.serverVersion=Tomcat Version
htmlManagerServlet.title=Tomcat Web Application Manager
managerServlet.alreadyContext=FAIL - Application already exists at path {0}
managerServlet.deleteFail=FAIL - Unable to delete [{0}]. The continued presence of this file may cause problems.
managerServlet.deployed=OK - Deployed application at context path {0}
managerServlet.deployFailed=FAIL - Failed to deploy application at context path {0}
managerServlet.deployedButNotStarted=FAIL - Deployed application at context path {0} but context failed to start
managerServlet.exception=FAIL - Encountered exception {0}
managerServlet.findleaksFail=FAIL - Find leaks failed: Host not instance of StandardHost
managerServlet.findleaksList=OK - Found potential memory leaks in the following applications:
managerServlet.findleaksNone=OK - No memory leaks found
managerServlet.inService=FAIL - The application [{0}] is already being serviced
managerServlet.invalidCommand=FAIL - Invalid parameters supplied for command [{0}]
managerServlet.invalidPath=FAIL - Invalid context path {0} was specified
managerServlet.listed=OK - Listed applications for virtual host {0}
managerServlet.listitem={0}:{1}:{2}:{3}
managerServlet.mkdirFail=FAIL - Unable to create directory [{0}]
managerServlet.noCommand=FAIL - No command was specified
managerServlet.noContext=FAIL - No context exists for path {0}
managerServlet.noGlobal=FAIL - No global JNDI resources are available
managerServlet.noManager=FAIL - No manager exists for path {0}
managerServlet.noSelf=FAIL - The manager can not reload, undeploy, stop, or undeploy itself
managerServlet.noWrapper=Container has not called setWrapper() for this servlet
managerServlet.notDeployed=FAIL - Context {0} is defined in server.xml and may not be undeployed
managerServlet.notSslConnector=SSL is not enabled for this connector
managerServlet.objectNameFail=FAIL - Unable to register object name [{0}] for Manager Servlet
managerServlet.postCommand=FAIL - Tried to use command {0} via a GET request but POST is required
managerServlet.reloaded=OK - Reloaded application at context path {0}
managerServlet.resourcesAll=OK - Listed global resources of all types
managerServlet.resourcesType=OK - Listed global resources of type {0}
managerServlet.saveFail=FAIL - Configuration save failed: {0}
managerServlet.saved=OK - Server configuration saved
managerServlet.savedContext=OK - Context {0} configuration saved
managerServlet.sessiondefaultmax=Default maximum session inactive interval {0} minutes
managerServlet.sessiontimeout={0} minutes: {1} sessions
managerServlet.sessiontimeout.unlimited=unlimited time: {0} sessions
managerServlet.sessiontimeout.expired={0} minutes: {1} sessions were expired
managerServlet.sessions=OK - Session information for application at context path {0}
managerServlet.sslConnectorCiphers=OK - Connector / SSL Cipher information
managerServlet.started=OK - Started application at context path {0}
managerServlet.startFailed=FAIL - Application at context path {0} could not be started
managerServlet.stopped=OK - Stopped application at context path {0}
managerServlet.storeConfig.invalidMBean=FAIL - Unable to find the StoreConfig Mbean. [{0}] is not a valid name for an MBean.
managerServlet.storeConfig.noMBean=FAIL - No StoreConfig MBean registered at [{0}]. Registration is typically performed by the StoreConfigLifecycleListener.
managerServlet.threaddump=OK - JVM thread dump
managerServlet.undeployed=OK - Undeployed application at context path {0}
managerServlet.unknownCommand=FAIL - Unknown command {0}
managerServlet.vminfo=OK - VM info
statusServlet.title=Server Status
statusServlet.complete=Complete Server Status
