#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
# native2ascii -encoding utf-8 bundle_bg.raw_properties bundle_bg.properties
pluginTitle=UPnP

status.ok=Look below for a list of UPnP devices.
status.devs=There are {0} main devices/services available.
status.none=No UPnP Devices found!
btn.search=Search for UPnP Devices
btn.reloadVars=Reload State Variables
tree.searching=Searching for UPnP Devices ...
tree.loading.title=Loading
device.title=Device Information
prop.name=Property Name
prop.value=Value
service.title=Service Information
service.id=Service ID:
service.type=Service Type:
vars.title=State Variables
vars.name=Name
vars.value=Value
vars.events=Sends Events
actions.title=Actions
actions.invoke=Invoke
args.name=Argument Name
args.type=UPnP Data Type
args.value=Value
dialog.title.ok=Success
no.actions=No actions available.
no.params.out=No output parameters.
actions.select=Select Action:
actions.invoke.title=Invoke the selected action
