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

report.category.column.description = Popis
report.category.column.document    = Dokument
report.category.sectionTitle       = Preh\u013ead
report.information.description1    = Tento dokument obsahuje zoznam r\u00f4znych dokumentov a odkazov, ktor\u00e9 s\u00fa s\u00fa\u010das\u0165ou v\u0161eobecn\u00fdch inform\u00e1ci\u00ed o projekte. Tieto dokumenty s\u00fa automaticky generovan\u00e9
report.information.description2    = z projektov\u00fdch \u00fadajov.
report.information.title           = Inform\u00e1cie o projekte
report.project.description1        = Tento dokument obsahuje preh\u013ead o projektov\u00fdch zostav\u00e1ch, ktor\u00e9 s\u00fa automaticky generovan\u00e9
report.project.description2        = . Nasleduje kr\u00e1tky popis ka\u017edej zostavy.
report.project.title               = Vygenerovan\u00e9 zostavy
