###############################################################################
# Copyright (c) 2003, 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
###############################################################################

#External Messages for EN locale
ECLIPSE_OSGI_NAME=Eclipse OSGi Framework
ECLIPSE_OSGI_VERSION=3.6.0
OSGI_VERSION=OSGi Service Platform Release 3
ECLIPSE_COPYRIGHT=Copyright (c) 2003, 2004 IBM Corporation and others. \nAll rights reserved. This program and the accompanying materials \nare made available under the terms of the Eclipse Public License v1.0 \nwhich accompanies this distribution, and is available at \nhttp://www.eclipse.org/legal/epl-v10.html \nContributors: \n     IBM Corporation - initial API and implementation
OSGI_SYSTEMBUNDLE_CREATE_EXCEPTION=Exception while creating System Bundle: {0}
OSGI_SYSTEMBUNDLE_DESCRIPTION_ERROR=Unable to construct System Bundle description.
OSGI_INTERNAL_ERROR=Internal Error in the OSGi framework. Please report this problem.
BUNDLE_INSTALL_RECURSION_EXCEPTION=Bundle is already being installed
BUNDLE_INSTALL_REQUIRED_EE_EXCEPTION=No match is available for the required execution environment: {0}
BUNDLE_INSTALL_SAME_UNIQUEID=Bundle \"{0}\" version \"{1}\" has already been installed from: {2}
BUNDLE_UNINSTALLED_EXCEPTION=Bundle \"{0}\" has been uninstalled
BUNDLE_CONTEXT_INVALID_EXCEPTION=BundleContext is no longer valid
BUNDLE_NATIVECODE_MATCH_EXCEPTION=No Bundle-NativeCode match
BUNDLE_NATIVECODE_INVALID_FILTER=Invalid selection filter in Bundle-NativeCode: {0}
BUNDLE_STATE_CHANGE_EXCEPTION=State change in progress for bundle \"{0}\" by thread \"{1}\".
BUNDLE_REFRESH_FAILURE=PackageAdmin.refreshPackages failed to complete
BUNDLE_ACTIVATOR_EXCEPTION=Exception in {0}.{1}() of bundle {2}.
BUNDLE_INVALID_ACTIVATOR_EXCEPTION=The activator {0} for bundle {1} is invalid
BUNDLE_UNRESOLVED_EXCEPTION=The bundle could not be resolved
BUNDLE_UNRESOLVED_STATE_CONFLICT=The state indicates the bundle is resolved
BUNDLE_UNRESOLVED_UNSATISFIED_CONSTRAINT_EXCEPTION=The bundle could not be resolved. Reason: {0}
BUNDLE_SYSTEMBUNDLE_UNINSTALL_EXCEPTION=The System Bundle cannot be uninstalled
BUNDLE_READ_EXCEPTION=An error occurred trying to read the bundle
BUNDLE_CLASSPATH_ENTRY_NOT_FOUND_EXCEPTION=The Bundle-ClassPath entry \"{0}\" was not found in the bundle: {1}
BUNDLE_NO_CLASSPATH_MATCH=The Bundle-ClassPath does not have any matching entries
BUNDLE_NOT_IN_FRAMEWORK=The bundle does not exist in the framework: {0}
BUNDLE_LOADER_ATTACHMENT_ERROR=Cannot attach fragment bundle \"{0}\" to resolved host \"{1}\".  Try refreshing the host bundle.
BUNDLE_FRAGMENT_CNFE=A fragment bundle cannot load classes: {0}
BUNDLE_FRAGMENT_START=A fragment bundle cannot be started: {0}
BUNDLE_FRAGMENT_STOP=A fragment bundle cannot be stopped: {0}
BUNDLE_TRANSIENT_START_ERROR=The bundle''s start level is not met.  Cannot transient start the bundle: {0}
BUNDLE_FRAGMENT_IMPORT_CONFLICT=Fragment bundle \"{0}\" attempted to import additional package \"{1}\".  Try refreshing the host bundle \"{2}\".
BUNDLE_EXTENSION_PERMISSION=Extension bundles must have AllPermission assigned.
BUNDLE_CNFE_NOT_RESOLVED=Cannot load \"{0}"\ because the bundle \"{1}\" cannot be resolved.
MANIFEST_INVALID_SPACE=The manifest line \"{0}\" has an invalid leading space '' '' character.
MANIFEST_INVALID_LINE_NOCOLON=The manifest line \"{0}\" is invalid; it has no colon '':'' character after the header key.
MANIFEST_INVALID_HEADER_EXCEPTION=Invalid manifest header {0}: \"{1}\"
MANIFEST_IOEXCEPTION=An error occurred while reading the manifest file.
SERVICE_FACTORY_EXCEPTION=Exception in {0}.{1}()
SERVICE_NOT_INSTANCEOF_CLASS_EXCEPTION={0}.getService() returned a service object that is not an instanceof the service class {1}
SERVICE_OBJECT_NULL_EXCEPTION={0}.getService() returned a null service object
SERVICE_ARGUMENT_NULL_EXCEPTION=The service parameter is null
SERVICE_ALREADY_UNREGISTERED_EXCEPTION=The service has been unregistered
SERVICE_EMPTY_CLASS_LIST_EXCEPTION=The array of service names is empty
HEADER_DUPLICATE_KEY_EXCEPTION=The key \"{0}\" already exists in another case variation
FILTER_INVALID=The filter is invalid.
FILTER_MISSING_LEFTPAREN=Missing ''('' at character {0}
FILTER_MISSING_RIGHTPAREN=Missing '')'' at character {0}
FILTER_TRAILING_CHARACTERS=Extraneous trailing characters at character {0}
FILTER_TERMINATED_ABRUBTLY=Filter ended abruptly
FILTER_INVALID_OPERATOR=Invalid operator at character {0}
FILTER_MISSING_ATTR=Missing attr at character {0}
FILTER_MISSING_VALUE=Missing value at character {0}
FILTER_INVALID_VALUE=Invalid value at character {0}
PROPERTIES_INVALID_FW_STARTLEVEL=Invalid initial framework start level.  Value must be a positive integer.  Using Default={0}
STARTLEVEL_EXCEPTION_INVALID_REQUESTED_STARTLEVEL=The requested start level of {0} is invalid.  The value must be a positive integer.
STARTLEVEL_CANT_CHANGE_SYSTEMBUNDLE_STARTLEVEL=The System Bundle's start level can not be modified.

LAUNCHER_ADAPTOR_ERROR=Unable to create FrameworkAdaptor.
LAUNCHER_INVALID_PORT=Invalid console port: {0}
LAUNCHER_COMPONENT_MISSING=Warning: The requested component ''{0}'' is not included in this runtime.
LAUNCHER_COMPONENT_JAR=Add ''{0}'' to the classpath.

CANNOT_SET_CONTEXTFINDER=The context finder has not been installed.

URL_HANDLER_INCORRECT_TYPE=The service property "{0}" is not the correct type for the service "{1}" registered by the bundle "{2}"
