###############################################################################
# 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_PACKAGE=imported package {0}
BUNDLE_UNRESOLVED_BUNDLE=required bundle {0}
BUNDLE_UNRESOLVED_HOST=host {0}
BUNDLE_UNRESOLVED_NOT_CHOSEN_EXCEPTION=The bundle could not be resolved. Reason: probably another version has been chosen 
BUNDLE_UNRESOLVED_UNSATISFIED_CONSTRAINT_EXCEPTION=The bundle could not be resolved. Reason: missing {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_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.
