###############################################################################
#  Copyright (c) 2007, 2012 IBM Corporation and others.
#
#  This program and the accompanying materials
#  are made available under the terms of the Eclipse Public License 2.0
#  which accompanies this distribution, and is available at
#  https://www.eclipse.org/legal/epl-2.0/
#
#  SPDX-License-Identifier: EPL-2.0
# 
#  Contributors:
#     IBM Corporation - initial API and implementation
#     Cloudsmith Inc - additional messages
#     Sonatype Inc - ongoing implementation
###############################################################################
artifact_not_found=Artifact not found: {0}.

io_failedRead=Unable to read repository at {0}.
ecf_configuration_error=Transport initialization error.


repoMan_internalError=Internal error.
repo_loading = Loading the repository {0}

CacheManager_Neither_0_nor_1_found=Neither {0} nor {1} found.
CacheManager_AuthenticationFaileFor_0=Authentication failed for {0}.
CacheManager_CannotLoadNonUrlLocation=Cannot load repository from non-URL location {0} 
CacheManager_FailedCommunicationWithRepo_0=Communication with repository at {0} failed.
CacheManage_ErrorRenamingCache=An error occurred while downloading {0}. The cache file {1} could not be renamed to {2}.

exception_malformedRepoURI = The repository location ({0}) must be a URI.

TransportErrorTranslator_400=Bad HTTP Request: {0}
TransportErrorTranslator_401=Authentication Failed - Unauthorized: {0}
TransportErrorTranslator_402=HTTP Payment Required: {0}
TransportErrorTranslator_403=HTTP Access Forbidden: {0}
TransportErrorTranslator_404=HTTP Remote File Not Found: {0}
TransportErrorTranslator_405=HTTP Method Not Allowed: {0}
TransportErrorTranslator_406=HTTP Request Not Acceptable: {0}
TransportErrorTranslator_407=HTTP Proxy Authentication Required: {0}
TransportErrorTranslator_408=HTTP Request Timeout: {0}
TransportErrorTranslator_409=HTTP Conflict In Request: {0}
TransportErrorTranslator_410=HTTP Remote File Permanently Removed: {0}
TransportErrorTranslator_411=HTTP Length Required: {0}
TransportErrorTranslator_412=HTTP Precondition Failed: {0}
TransportErrorTranslator_413=HTTP Requested Entity Too Large: {0}
TransportErrorTranslator_414=HTTP Request URI Too Long: {0}
TransportErrorTranslator_415=HTTP Unsupported Media Type: {0}
TransportErrorTranslator_416=HTTP Requested Range Not Satisfiable: {0}
TransportErrorTranslator_417=HTTP Expectation Failed: {0}
TransportErrorTranslator_418=HTTP Cannot provision coffee from a tea pot: {0}
TransportErrorTranslator_422=HTTP (WebDav) Unprocessable Entity: {0}
TransportErrorTranslator_423=HTTP (WebDAV) Locked: {0}
TransportErrorTranslator_424=HTTP (WebDAV) Failed Dependency: {0}
TransportErrorTranslator_425=HTTP Unordered Collection: {0}
TransportErrorTranslator_426=HTTP Upgrade Required: {0}
TransportErrorTranslator_449=HTTP Retry With Response: {0}
TransportErrorTranslator_450=HTTP Blocked By Parental Control: {0}
TransportErrorTranslator_500=HTTP Server ''Internal Error'': {0}
TransportErrorTranslator_501=HTTP Server ''Not Implemented'': {0}
TransportErrorTranslator_502=HTTP Server ''Bad Gateway'' : {0}
TransportErrorTranslator_503=HTTP Server ''Service Unavailable'': {0}
TransportErrorTranslator_504=HTTP Server ''Gateway Timeout'': {0}
TransportErrorTranslator_505=HTTP Server ''HTTP Version Not Supported'': {0}
TransportErrorTranslator_506=HTTP Server ''Variant Also Negotiates'': {0}
TransportErrorTranslator_507=HTTP (WebDAV) ''Insufficient Storage'': {0}
TransportErrorTranslator_508=HTTP Server ''Bandwidth Limit Exceeded'': {0}
TransportErrorTranslator_510=HTTP Server ''Not Extended'': {0}
TransportErrorTranslator_MalformedRemoteFileReference=Malformed reference to remote file: {0}
TransportErrorTranslator_UnableToConnectToRepository_0=Unable to connect to repository {0}
TransportErrorTranslator_UnknownErrorCode=HTTP Server Unknown HTTP Response Code ({0}):{1}
TransportErrorTranslator_UnknownHost=Unknown Host: {0}
fetching_0_from_1=Fetching {0} from {1}
fetching_0_from_1_2=Fetching {0} from {1} ({2})
fetching_0_from_1_2_at_3=Fetching {0} from {1} ({2} at {3}/s)
fetching_0_from_1_2_of_3_at_4=Fetching {0} from {1} ({2} of {3} at {4}/s)
FileTransport_reader=File Transport Reader
FileTransport_cancelCheck=File Transport Cancel Handler
connection_to_0_failed_on_1_retry_attempt_2=Connection to {0} failed on {1}. Retry attempt {2} started
UnableToRead_0_TooManyAttempts=Unable to read repository at: {0}. Too many failed login attempts.
UnableToRead_0_UserCanceled=Unable to read repository at: {0}. Login canceled by user.
RepositoryTransport_failedReadRepo=Error while reading from repository: {0}.
