###############################################################################
# Copyright (c) 2004, 2005 IBM Corporation and others.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
# 
# Contributors:
#     IBM Corporation - initial API and implementation
###############################################################################

# --------------- Tasks (progress monitors) ---------------
savingTask=Saving {0}
deletingTask=Deleting {0}

taskPerforming=Performing Tasks
taskModifyModules=Adding and/or removing projects.

publishing=Publishing to {0}...
publishingStatusOk=Publishing finished successfully
publishingStatusInfo=Publishing completed with information
publishingStatusWarning=Publishing completed with a warning
publishingStatusError=Publishing failed
publishingStop=Disconnecting from server

publishingModule=Publishing: {0}
publishedModule={0} published successfully

jobStartingServer=Starting server - {0}
jobRestartingServer=Restarting server - {0}
jobUpdateServer=Updating status for {0}...
jobInstallingRuntime=Installing server runtime

# --------------- Misc UI ---------------

# Error Messages
errorPublishing=Could not publish to the server.
errorNoConfiguration=The server has no configuration.
errorLoading=Error loading from {0}.
errorSaving=Could not save to {0}.
errorModuleRestartFailed=Could not restart the module.
errorWorkingCopyTimestamp=Could not save because the file has been modified since the start of editing.
errorRuntimeName=Enter a name for the runtime.
errorDuplicateRuntimeName=Name is already in use.
errorStartTimeout=Timeout waiting for {0} to start. Server did not start after {1}s. 
errorStartFailed=Server {0} failed to start.
errorCannotAddModule=The server does not support version {1} of the {0} specification.
errorInstallingServer=Error occurred installing server: {0}
errorInstallingServerFeature=Could not download and install update feature.

# Default server creation names
# {0} will be replaced by a number if the given name is already being used
defaultServerProjectName=Servers{0}
defaultRuntimeName={0}
defaultRuntimeName2={0} ({1})
defaultServerName={0} at {1}
defaultServerName2={0} at {1} ({2})
defaultServerName3={0}
defaultServerName4={0} ({1})

# Used when a name can't be found
defaultVendor=Basic
defaultVersion=Basic
moduleTypeUnknown=Unknown module

canStartErrorState=The server cannot be started because it is current starting or stopping.
errorLaunchMode=The server does not support the given launch mode.
errorRestartNotStarted=Cannot restart the server because it is not currently running.
errorPublishStarting=Cannot publish to the server because it is currently starting or stopping.
errorPublishNoRuntime=Cannot publish to the server because it is missing its runtime.
errorPublishNoConfiguration=Cannot publish to the server because the configuration is missing.
errorStopAlreadyStopped=The server cannot be stopped because it is already stopped.
errorRestartModule=The module cannot be restarted.
errorMissingAdapter=Could not load server adapter. Check to make sure that the installation is complete.