#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=Вижте по-долу за наличните устройства.
status.devs=Открити са {0} главни устройства/услуги.
status.none=Няма открити UPnP устройства!
btn.search=Търсене на устройства
btn.reloadVars=Презареждане на променливите
tree.searching=Търсене на устройства...
tree.loading.title=Зареждане...
device.title=Информация за устройството
prop.name=Атрибут
prop.value=Стойност
service.title=Информация за услугата
service.id=ID:
service.type=Тип:
vars.title=Променливи
vars.name=Име
vars.value=Стойност
vars.events=Изпраща нотификации
actions.title=Действия
actions.invoke=Изпълнение
args.name=Име на аргумента
args.type=UPnP тип
args.value=Стойност
dialog.title.ok=Успех!
no.actions=Няма асоциирани действия
no.params.out=Няма изходни параметри
actions.select=Действие:
actions.invoke.title=Изпълнение на избраното действие
