###############################################################################
# Copyright (c) 2000, 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
###############################################################################
### Common runtime plugin messages

ok = OK

### metadata
meta_couldNotCreate = Error trying to create the platform metadata area: {0}.
meta_instanceDataUnspecified = The instance data location has not been specified yet.
meta_noDataModeSpecified = No instance data can be specified.
meta_notDir = Specified platform location \"{0}\" is not a directory.
meta_readonly = The platform metadata area could not be written: {0}.  By default the platform writes its content\nunder the current working directory when the platform is launched.  Use the -data parameter to\nspecify a different content area for the platform.
meta_pluginProblems = Problems occurred when invoking code from plug-in: \"{0}\".

### parsing/resolve
parse_doubleSeparatorVersion=Plug-in version identifier, \"{0}\", must not contain two consecutive separator characters.
parse_emptyPluginVersion=A plug-in version identifier must be non-empty.
parse_fourElementPluginVersion=Plug-in version identifier, \"{0}\", can contain a maximum of four components.
parse_numericMajorComponent=The major (1st) component of plug-in version identifier, \"{0}\", must be numeric.
parse_numericMinorComponent=The minor (2nd) component of plug-in version identifier, \"{0}\", must be numeric.
parse_numericServiceComponent=The service (3rd) component of plug-in version identifier, \"{0}\", must be numeric.
parse_oneElementPluginVersion=Plug-in version identifier, \"{0}\", must contain at least one component.
parse_postiveMajor=Plug-in version identifier, \"{0}\", must have a positive major (1st) component.
parse_postiveMinor=Plug-in version identifier, \"{0}\", must have a positive minor (2nd) component.
parse_postiveService=Plug-in version identifier, \"{0}\", must have a positive service (3rd) component.
parse_separatorEndVersion=Plug-in version identifier, \"{0}\", must not end with a separator character.
parse_separatorStartVersion=Plug-in version identifier, \"{0}\", must not start with a separator character.

### URL
url_badVariant = Unsupported \"platform:\" protocol variation \"{0}\".
url_createConnection = Unable to create connection on \"{0}\".
url_invalidURL = Invalid URL \"{0}\".
url_noOutput = Output is not supported for \"{0}\", location is read-only.
url_noaccess = Unhandled URL protocol \"{0}\".
url_resolveFragment = Unable to resolve fragment \"{0}\".
url_resolvePlugin = Unable to resolve plug-in \"{0}\".

activator_not_available = The bundle activator for the org.eclipse.equinox.common bundle is not available.
activator_resourceBundleNotFound=Resource bundle not found for locale: {0}
activator_resourceBundleNotStarted=ResourceTranslator called before plugin is started

adapters_internal_error_of=Internal error while adapting {0} -> {1}: {2}