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

pluginxdoc.yes=Oui
pluginxdoc.no=Non
pluginxdoc.detail=<strong>{0}</strong> : <code>{1}</code>

pluginxdoc.description=<strong>Description</strong> :
pluginxdoc.nodescription=(aucune description)
pluginxdoc.mojodescriptor.notice.note=<strong>Note</strong> :
pluginxdoc.mojodescriptor.notice.isMavenReport=Ce goal doit \u00eatre utilis\u00e9 comme un rapport de Maven.
pluginxdoc.mojodescriptor.fullname=<strong>Nom complet</strong> :
pluginxdoc.mojodescriptor.attributes=<strong>Attributs</strong> :
pluginxdoc.mojodescriptor.deprecated=<strong>Le goal de ce plugin est obsol\u00e8te</strong> :
pluginxdoc.mojodescriptor.projectRequired=Exige un projet Maven pour \u00eatre ex\u00e9cut\u00e9.
pluginxdoc.mojodescriptor.aggregator=S'ex\u00e9cute comme un plugin agr\u00e9g\u00e9.
pluginxdoc.mojodescriptor.directInvocationOnly=S'ex\u00e9cute par l'invocation directe seulement.
pluginxdoc.mojodescriptor.reportingMojo=S'ex\u00e9cute seulement comme un reportSet (goal de reporting).
pluginxdoc.mojodescriptor.dependencyResolutionRequired=Exige une r\u00e9solution des d\u00e9pendances des artefacts dans le scope : <code>{0}</code>.
pluginxdoc.mojodescriptor.dependencyCollectionRequired=Exige une collecte des d\u00e9pendances des artefacts dans le scope : <code>{0}</code>.
pluginxdoc.mojodescriptor.since=Depuis la version : <code>{0}</code>.
pluginxdoc.mojodescriptor.phase=S'associe par d\u00e9faut dans la phase du cycle de vie : <code>{0}</code>.
pluginxdoc.mojodescriptor.executePhase=Appelle l'ex\u00e9cution de la phase du cycle de vie <code>{0}</code> avant de s'ex\u00e9cuter.
pluginxdoc.mojodescriptor.executeGoal=Appelle l'ex\u00e9cution du goal de ce plugin <code>{0}</code> avant de s'ex\u00e9cuter.
pluginxdoc.mojodescriptor.executeLifecycle=S'ex\u00e9cute dans son propre cycle de vie : <code>{0}</code>.
pluginxdoc.mojodescriptor.onlineRequired=Exige que Maven s'ex\u00e9cute en ligne.
pluginxdoc.mojodescriptor.inheritedByDefault=N'est PAS h\u00e9rit\u00e9 par d\u00e9faut dans une construction multi-projet.
pluginxdoc.mojodescriptor.parameter.details=D\u00e9tails des param\u00e8tres
pluginxdoc.mojodescriptor.parameter.deprecated=<strong>Obsol\u00e8te.</strong> {0}
pluginxdoc.mojodescriptor.parameter.name=Nom
pluginxdoc.mojodescriptor.parameter.name_internal=<strong><a name="{0}">{0}</a> :</strong>
pluginxdoc.mojodescriptor.parameter.description=Description
pluginxdoc.mojodescriptor.parameter.type=Type
pluginxdoc.mojodescriptor.parameter.since=Depuis
pluginxdoc.mojodescriptor.parameter.required=Exig\u00e9
pluginxdoc.mojodescriptor.parameter.expression=Expression
pluginxdoc.mojodescriptor.parameter.default=D\u00e9faut
pluginxdoc.mojodescriptor.parameter.defaultValue=<strong>Valeur par d\u00e9faut est</strong> : <code>{0}</code>.
pluginxdoc.mojodescriptor.requiredParameters=Param\u00e8tres requis
pluginxdoc.mojodescriptor.optionalParameters=Param\u00e8tres optionnels
pluginxdoc.mojodescriptor.parameters=Param\u00e8tres
pluginxdoc.mojodescriptor.noParameter=(aucun param\u00e8tre)
pluginxdoc.mojodescriptor.threadSafe=Le goal est thread-safe et supporte des constructions parall\u00e8les.
