#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
#

# Components plugin
components.pluginTitle=Komponenten
scr.status.no_service=Declarative Service ist Voraussetzung für diese Funktionalität!
scr.status.no_components=Zur Zeit sind keine Komponenten installiert!
scr.status.ok=Anzahl installierter Komponenten: {0}
scr.action.enable=Aktivieren
scr.action.disable=Deaktivieren
scr.action.configure=Konfigurieren
scr.prop.bundle=Bundle
scr.prop.defstate=Default Status
scr.prop.activation=Aktivierung
scr.prop.properties=Eigenschaften
scr.prop.class=Implementationsklasse
scr.prop.componentfactory=Komponenten Factory Name
scr.prop.configurationpolicy=Konfigurations Policy
scr.serv.type=Dienst Typ
scr.serv=Dienste
scr.title.actions=Aktionen
scr.title.status=Status
scr.title.name=Name
