﻿#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=Users
role.tree.root=Users and Groups
role.new=New Role
role.key=Key
role.value=Value
role.properties=Properties
role.credentials=Credentials
role.new.title=New role
role.name=Name
role.type.1=User
role.type.2=Group
type.string=String
type.bytes=Byte[]
type.password=Password Hash
role.statline=There are {1} user(s) and {2} role(s) arranged in {0} groups.
role.help.initial=\
- Select a role on the left side to open it and edit it's properties and credentials<br/>\
- You can drag groups, roles and users in the tree to arrange them and declare membership<br/>\
- While dragging, hold Ctrl button to copy, instead of move<br/>\
- To remove a role from a group - drag it to the root node<br/>\
- The roles which are in <i>italic</i> are 'required' members of the current group<br/>\
- To change the membership, select the role and use 'Toggle Membership' button.
toggleRequired=Toggle Membership
