#
# 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.plugin.name=Documentation du plugin
report.plugin.description=Ce rapport fournit de la documentation sur les goals et les param\u00eatres d'un plugin.
report.plugin.title=Documentation du plugin

report.plugin.goals.nogoal=Aucun goal disponible.
report.plugin.goals.intro=Goals disponibles pour ce plugin :
report.plugin.goals.column.goal=Goal
report.plugin.goals.column.isMavenReport=Rapport?
report.plugin.goals.column.description=Description
report.plugin.goal.nodescription=Pas de description.
report.plugin.goal.deprecated=Obsol\u00e8te.

report.plugin.systemrequirements=Exigences Syst\u00e8mes
report.plugin.systemrequirements.intro=Ce qui suit sp\u00e9cifie les exigences minimales pour ex\u00e9cuter ce plugin Maven :
report.plugin.systemrequirements.nominimum= Aucune exigence minimale.
report.plugin.systemrequirements.maven=Maven
report.plugin.systemrequirements.jdk=JDK
report.plugin.systemrequirements.memory=M\u00e9moire
report.plugin.systemrequirements.diskspace=Espace Disque

report.plugin.usage=Utilisation
report.plugin.usage.intro=Vous devez sp\u00e9cifier la version dans la configuration de votre projet :
report.plugin.usage.pluginManagement=Pour d\u00e9finir la version du plugin dans le POM parent
report.plugin.usage.plugins=Pour utiliser les goals du plugin dans votre POM ou POM parent
report.plugin.usage.reporting=Pour utiliser les goals de rapports dans votre POM ou POM parent
report.plugin.configuration.end=Pour plus d'informations, consultez {"Guide to Configuring Plug-ins", http://maven.apache.org/guides/mini/guide-configuring-plugins.html}

report.plugin.isReport=Oui
report.plugin.isNotReport=Non
