#Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

#
# Web Console strings for reference all strings here are commented.
# This file may be used to produce a translation of the strings
#
# Note that properties files are ISO-8859-1 encoded. To provide translations
# for languages requiring different character encodings, you may use the
# native2ascii Maven Plugin from http://mojo.codehaus.org/native2ascii-maven-plugin/
# to translate the natively encoded files to ISO-8859-1 during bundle build
#
# Translations requiring non-ISO-8859-1 encoding are placed in the
# src/main/native2ascii/OSGI-INF/l10n folder and are converted using said
# plugin while building the bundle
#


# Common UI
reload=Reload
change=Change
abort=Cancel
back=Back
id=Id
ranking=Ranking
type=Type
type_s=Type(s)
bundle=Bundle
version=Version
help=Help
start=Start
stop=Stop
save=Save
reset=Reset
delete=Delete
refresh=Refresh
logout=Log out

# VMStat plugin
vmstat.pluginTitle=System Information
vmstat.stopped=Framework has been stopped.
vmstat.restarting=Framework is restarting. stand by ...
vmstat.reloading.in=Reloading in
vmstat.running=System is up and running!
vmstat.sl.title=Start Level Information:
vmstat.sl.system=System Start Level
vmstat.sl.bundle=Default Bundle Start Level
vmstat.info.title=Server Information:
vmstat.lastStarted=Last Started
vmstat.upTime=Uptime
vmstat.upTime.format.days=days
vmstat.framework=Framework
vmstat.shutdown.in=Shutdown in 
vmstat.java.title=Java Information:
vmstat.java.runtime=Java Runtime
vmstat.java.jvm=Java Virtual Machine
vmstat.processors=Number of Processors
vmstat.mem.total=Total Memory
vmstat.mem.used=Used Memory
vmstat.mem.free=Free Memory
vmstat.gc.title=Garbage Collection
vmstat.gc.button=Run

# Services plugin
services.pluginTitle=Services
services.details.hide=Hide Details
services.details.tip=Details
services.statusline=Services information: {0} service(s) in total.
services.caption=Services
services.usingBundles=Using Bundles
services.info.name=Used Services
services.info.descr=This is a OSGi service that is used by the current bundle. Click to see more details in 'Services' plugin.
services.info.key=Service #{0} of type(s) {1}
services.filter.help=An LDAP filter string to match against service properties.
services.filter.apply=Apply Filter

# Log plugin
logs.pluginTitle=Log Service
log.status.ok=Log Service is running.
log.status.missing=Log Service is not installed/running.
log.severity.label=Severity at least:
log.received=Received
log.level=Level
log.message=Message
log.service=Service
log.exception=Exception
log.level.error=ERROR
log.level.warn=WARN
log.level.info=INFO
log.level.debug=DEBUG
log.traces=Exception details:
log.traces.full=Full Trace
log.traces.min=Message Only


# Bundles plugin
bundles.pluginTitle=Bundles
bundles.statline.prefix=Bundle information:
bundles.statline.all=all {0} bundles active
bundles.statline.total={0} bundles in total
bundles.statline.active={0} bundles active
bundles.statline.fragments={0} active fragments
bundles.statline.resolved={0} bundles resolved
bundles.statline.installed={0} bundles installed
bundles.install_or_update=Install or Update
bundles.install_update=Install/Update...
bundles.refreshPkg=Refresh Packages
bundles.name=Name
bundles.name.symb=Symbolic Name
bundles.category=Category
bundles.status=Status
bundles.actions=Actions
# bundle details
bundles.location=Bundle Location
bundles.lastMod=Last Modification
bundles.doc=Bundle Documentation
bundles.vendor=Vendor
bundles.copyright=Copyright
bundles.description=Description
bundles.startlevel=Start Level
bundles.classpath=Bundle Classpath
bundles.pkg.exported=Exported Packages
bundles.pkg.imported=Imported Packages
bundles.pkg.importingBundles=Importing Bundles
bundles.manifest.headers=Manifest Headers
bundles.hosts=Host Bundles
bundles.framents=Fragments Attached
# actions
bundles.update=Update
bundles.uninstall=Uninstall
bundles.refreshImports=Refresh Package Imports
# upload form
bundles.upload.caption=Upload / Install Bundles
bundles.upload.start=Start Bundle
bundles.upload.level=Start Level
# filter
bundles.filter.apply=Apply Filter
bundles.filter.clear=Clear Filter
bundles.filter.help=A string or RegExp expression which is matched againse bundle id, name, symbolic name or version. In case 'Filter All' is used, the value must be a valid LDAP string.
bundles.filter.ldap=Filter All
bundles.filter.ldap.tip=When clicked, a server-side matching is performed agains *all* bundle manifest headers. The expression is expected to be a valid OSGi Filter
bundles.filter.no_match=There are no bundles matching the current filter
# states
bundles.state.1=Uninstalled
bundles.state.2=Installed
bundles.state.4=Resolved
bundles.state.8=Starting
bundles.state.16=Stopping
bundles.state.32=Active
bundles.state.unknown=Unknown State: {0}
bundles.state.fragment=Fragment
# action error
bundles.error.title=Error while executing bundle operation!


# Configuration plugin
configMgr.pluginTitle=Configuration
config.status.ok=Configuration Admin Service is running.
config.status.missing=Configuration Admin Service is not installed/running.
config.properties=Properties
config.properties.enter=Enter Name-Value pairs of configuration properties
config.info.title=Configuration Information
config.info.pid=Persistent Identity (PID)
config.info.fpid=Factory Persistent Identifier (Factory PID)
config.info.binding=Configuration Binding
config.info.unbound=Unbound or new configuration 
config.unbind.btn=Unbind
config.unbind.tip=Unbind configuration from bundle
config.del.ask=Are you sure to delete this configuration ?
config.del.config=Configuration: 
config.del.bundle=Bundle: 
config.unbind.ask=Are you sure to unbind this configuration ?
config.factories.title=Factory Configurations
config.configurations.title=Configurations
config.create.tip=Create new factory configuration
config.edit.tip=Edit the configuration values
config.title.exists= ?\ 
config.title.exists.tip=There is a real Configuration created. If the checkbox was missing, it would be either Managed Service or Meta-Type definition available but no configuration.
config.title.actions=Actions
config.title.bundle=Bundle
config.title.name=Name
config.bind.error=Error: the PID "{0}" is bound to "{1}" but the actual managed service is registered from "{2}" bundle
config.property.default.value=Note, that this property is not set. The above field contains is the *default value* specified in the Meta Type service.
config.property.optional.value=This attribute is optional. To save it in the current configuration you must check it. To remove it from the configuration uncheck the checkbox.

# License plugin
licenses.pluginTitle=Licenses
license.status.ok=The following bundles contains license files.
license.status.none=No bundles with license files available
license.resources=Bundle Resources: 
license.resources.embedded=Embedded {0}: 

# Configuration Status plugin
configStatus.pluginTitle=Configuration Status
configStatus.wait=Please wait...
configStatus.wait.msg=Loading...

# 404 plugin not found
404=\
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="refresh" content="3;URL={0}" />\
<title>404 Not Found</title>\
</head><body>\
<p>The requested page was not found. If you are not forwarded in 3 seconds to the Web Console, please click <a href="{0}">here</a></p>\
</body></html>


# localized configuration meta-data
metadata.name=Apache Felix OSGi Management Console
metadata.description=Configuration of the Apache Felix OSGi Management Console.

metadata.manager.root.name=Root URI
metadata.manager.root.description=The root path to the OSGi Management Console.

metadata.http.service.filter.name=Http Service Selector
metadata.http.service.filter.description=\
 The Http Service Selector is an OSGi filter used to select the Http Service to\
 which the Web Console binds. The value of this property (if not empty) is\
 combined the object class selection term to get the actual service selection\
 filter like (&(objectClass=org.osgi.service.http.HttpService)(selector)). This\
 property must not have leading an trailing parentheses. For example, to bind\
 to the service with service ID 15 set the selector to 'service.id=15' (without\
 the quotes). By default (if this property is not set or set to an empty\
 string) the Web Console binds with any Http Service available.

metadata.default.render.name=Default Page
metadata.default.render.description=The name of the default configuration page when invoking the OSGi Management console.

metadata.realm.name=Realm
metadata.realm.description=The name of the HTTP Authentication Realm.

metadata.username.name=User Name
metadata.username.description=The name of the user allowed to access the OSGi \
 Management Console. To disable authentication clear this value. This property \
 is ignored if a WebConsoleSecurityProvider is used for authentication.

metadata.password.name=Password
metadata.password.description=The password for the user allowed to access the \
 OSGi Management Console. This property is ignored if a \
 WebConsoleSecurityProvider is used for authentication.

metadata.category.name=Default Category
metadata.category.description=The default category (menu label) to be used \
 for plugins not registered with a felix.webconsole.category service \
 property or overwriting the AbstractWebConsole.getCategory() method. The \
 default value is "Main".

metadata.plugins.name=Plugins
metadata.plugins.description=Select active plugins

metadata.loglevel.name=Log Level
metadata.loglevel.description=Logging Level

metadata.locale.name=Locale
metadata.locale.description=If set, this locale forces the localization to use this locale instead of the one requested by the web browser

# https://issues.apache.org/jira/browse/FELIX-3491
bundles.success.title=Success
bundles.success.text=Operation completed succesfully.
