﻿#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
#
role.pluginTitle=Потребители
role.tree.root=Групи и потребители
role.new=Нова роля
role.key=Ключ
role.value=Стойност
role.properties=Атрибути
role.credentials=Акредитиви
role.new.title=Създаване на нова роля
role.name=Име
role.type.1=Потребител
role.type.2=Група
type.string=Низ
type.bytes=Данни
type.password-MD5=Парола (MD5)
type.password-SHA1=Парола (SHA-1)
type.password-SHA256=Парола (SHA256)
type.password-SHA512=Парола (SHA512)
role.statline=Има {1} потребител(я) и {2} роли организирани в {0} групи.
role.help.initial=\
- Изберете роля от ляво, за да я отворите и промените нейните атрибути<br/>\
- Можете да завлачвате с мишката ролите за да ги аранжирате. По този начин декларирате тяхното членство в определена група<br/>\
- Ако при завлачването натиснете клавиша Ctrl, ще копирате избраната роля, вместо да я преместите<br/>\
- За да премахнете роля от група - завлачете я в основата на дървото<br/>\
- Ролите, които са в <i>курсив</i> са задължителни членове на групата<br/>\
- За да направите роля задължителна за групата, (или обикновена) кликнете двойно върху нея

