#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=Abort
back=Back
id=Id
type=Type
type_s=Type(s)
bundle=Bundle
version=Version
help=Help
start=Start
stop=Stop
save=Save
reset=Reset
delete=Delete
refresh=Refresh

# VMStat plugin
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.framework=Framework
vmstat.shutdown.in=Shutdown in 
vmstat.java.title=Java Information:
vmstat.java.runtime=Java Runtime
vmstat.java.jvm=Java Virtual Machine
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.details.hide=Hide Details
services.details.tip=Details
services.statusline=Services information: {0} service(s) in total.
services.caption=Services

# Log plugin
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

# Deployment Admin plugin
deployment.status.no_data=No deployment packages installed!
deployment.status.no_service=Deployment Admin is not installed/running!
deployment.status.ok=Deployment Admin service is running
deployment.details=Details
deployment.actions=Actions
deployment.install_update=Install or Update
deployment.package.name=Package Name
deployment.bundles=Bundles
deployment.uninstall=Uninstall

# Shell plugin
shell.clear=Clear
shell.status=Use the command prompt to execute shell commands.

# Bundles plugin
bundles.statline=Bundle information: {0} bundles in total, {1} bundles active, {2} active fragments, {3} bundles resolved, {4} 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.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


# Components plugin
scr.status.no_service=Apache Felix Declarative Service required for this function!
scr.status.no_components=No components installed currently!
scr.status.ok=Number of installed components: {0}
scr.action.enable=Enable
scr.action.disable=Disable
scr.action.configure=Configure
scr.prop.bundle=Bundle
scr.prop.defstate=Default State
scr.prop.activation=Activation
scr.prop.properties=Properties
scr.serv.type=Service Type
scr.serv=Services
scr.title.actions=Actions
scr.title.status=Status
scr.title.name=Name


# Configuration plugin
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

# License plugin
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}: 

# OBR Plugin
obr.status.ok=The Apache Bundle Repository service is up and running.
obr.status.no=The Apache Bundle Repository service is not available!
obr.version.select=Select Version...
obr.repo.title=Bundle Repositories
obr.action.add=Add
obr.action.search=Search
obr.action.deploy=Deploy Selected
obr.action.deploystart=Deploy and Start Selected
obr.repo.name=Name
obr.repo.url=URL
obr.repo.lastModified=Last Modified
obr.repo.actions=Actions
obr.res.title=Available Resources
obr.res.name=Resource Name
obr.res.installedVer=Installed Version
