#
#  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.
#


#
# This file contains localization strings for configuration labels and
# descriptions as used in the metatype.xml descriptor generated by the
# the Sling SCR plugin

org.apache.felix.scr.ScrService.name = Apache Felix Declarative Service Implementation
org.apache.felix.scr.ScrService.description = Configuration for the Apache \
 Felix Declarative Services Implementation. This configuration overwrites \
 configuration defined in framework properties of the same names.
 
ds.loglevel.name = SCR Log Level
ds.loglevel.description = Allows limiting the amount of logging information \
 sent to the OSGi LogService. Supported values are DEBUG, INFO, WARN, and \
 ERROR. Default is ERROR.
 
ds.factory.enabled.name = Extended Factory Components
ds.factory.enabled.description = Whether or not to enable the support for \
 creating Factory Component instances based on factory configuration. This \
 is an Apache Felix SCR specific extension, explicitly not supported by the \
 Declarative Services specification. Reliance on this feature prevent the \
 component from being used with other Declarative Services implementations. \
 The default value is false to disable this feature.
