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

servlet.get.name = Apache Sling GET Servlet
servlet.get.description = The Sling GET servlet is registered as the default \
 servlet to handle GET requests.
 
servlet.version.name = Apache Sling Version Info Servlet
servlet.version.description = The Sling Version Info Servlet renders list of \
versions available for the current resource

aliases.name = Extension Aliases
aliases.description = The aliases can be used to map several extensions to a \
 single servlet. For instance "xml:pdf,rtf" maps the extensions ".pdf" and \
 ".rtf" to the servlet helper handling the ".xml" extension.

index.files.name = Index Resources
index.files.description = List of child resources to be considered for rendering \
 the index of a "directory". The default value is [ "index", "index.html" ]. \
 Each entry in the list is checked and the first entry found is included to \
 render the index. If an entry is selected, which has not extension (for \
 example the "index" resource), the extension ".html" is appended for the \
 inclusion to indicate the desired text/html rendering. If the resource name \
 has an extension (as in "index.html"), no additional extension is appended \
 for the inclusion. This configuration corresponds to the <DirectoryIndex> \
 directive of Apache HTTP Server (httpd).
 
index.name = Auto Index
index.description = Controls whether a simple directory index is rendered for \
 a directory request. A directory request is a request to a resource with a \
 trailing slash (/) character, for example http://host/apps/. If none of the \
 index resources exists, the default GET servlet may automatically render an \
 index listing of the child resources if this option is checked, which is the \
 default. If this option is not checked, the request to the resource is \
 forbidden and results in a status 403/FORBIDDEN. This configuration \
 corresponds to the "Index" option of the Options directive of Apache HTTP \
 Server (httpd).
 
enable.html.name = Enable HTML
enable.html.description = Whether the renderer for HTML of the default GET \
 servlet is enabled or not. By default the HTML renderer is enabled.
enable.txt.name = Enable Plain Text
enable.txt.description = Whether the renderer for plain text of the default GET \
 servlet is enabled or not. By default the plain text renderer is enabled.
enable.json.name = Enable JSON
enable.json.description = Whether the renderer for JSON of the default GET \
 servlet is enabled or not. By default the JSON renderer is enabled.
enable.xml.name = Enable XML
enable.xml.description = Whether the renderer for XML of the default GET \
 servlet is enabled or not. By default the XML renderer is enabled.

org.apache.sling.servlets.get.impl.RedirectServlet.name = Apache Sling Redirect Servlet
org.apache.sling.servlets.get.impl.RedirectServlet.description = The Sling servlet \
 handling redirect resources.
json.maximumresults.name = JSON Max results
json.maximumresults.description = The maximum number of resources that should \
 be returned when doing a node.5.json or node.infinity.json. In JSON terms \
 this basically means the number of Objects to return. Default value is \
 200.
