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

#Commons
report.And=and
report.SetRangeUnknown=Changes from an unknown range
report.SetRangeSince=Changes since
report.SetRangeBetween=Changes between
report.SetTagCreation=Changes since project creation
report.SetTagSince=Changes since tag
report.SetTagBetween=Changes between tags
report.To=to
report.TotalCommits=Total commits

#Changelog
report.changelog.header=Change Log Report
report.changelog.mainTitle=Change Log Report
report.changelog.ChangedSetsTotal=Total number of changed sets
report.changelog.FilesChanged=Total number of files changed
report.changelog.timestamp=Timestamp
report.changelog.author=Author
report.changelog.details=Details
report.changelog.revision=Revision

#Developer Activity
report.dev-activity.header=Developer Activity Report
report.dev-activity.mainTitle=Developer Activity Report
report.dev-activity.noDevelopers=No developers found in pom.
report.dev-activity.range=Range
report.dev-activity.filesChanged=Total Number of Files Changed
report.dev-activity.developer=Developer

#File Activity
report.file-activity.header=File Activity Report
report.file-activity.mainTitle=File Activity Report
report.file-activity.range=Range
report.file-activity.filesChanged=Total Number of Files Changed
report.file-activity.timesChanged=Number of Times Changed
report.file-activity.filename=Filename