# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
#
# Copyright 1997-2010 Oracle and/or its affiliates. All rights reserved.
#
# Oracle and Java are registered trademarks of Oracle and/or its affiliates.
# Other names may be trademarks of their respective owners.
#
# The contents of this file are subject to the terms of either the GNU
# General Public License Version 2 only ("GPL") or the Common
# Development and Distribution License("CDDL") (collectively, the
# "License"). You may not use this file except in compliance with the
# License. You can obtain a copy of the License at
# http://www.netbeans.org/cddl-gplv2.html
# or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
# specific language governing permissions and limitations under the
# License.  When distributing the software, include this License Header
# Notice in each file and include the License file at
# nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the GPL Version 2 section of the License file that
# accompanied this code. If applicable, add the following below the
# License Header, with the fields enclosed by brackets [] replaced by
# your own identifying information:
# "Portions Copyrighted [year] [name of copyright owner]"
#
# Contributor(s):
#
# The Original Software is NetBeans. The Initial Developer of the Original
# Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
# Microsystems, Inc. All Rights Reserved.
#
# If you wish your version of this file to be governed by only the CDDL
# or only the GPL Version 2, indicate your decision by adding
# "[Contributor] elects to include this software in this distribution
# under the [CDDL or GPL Version 2] license." If you do not indicate a
# single choice of license, a recipient has the option to distribute
# your version of this file under either the CDDL, the GPL Version 2 or
# to extend the choice of license to its licensees as provided above.
# However, if you add GPL Version 2 code and therefore, elected the GPL
# Version 2 license, then the option applies only if the new code is
# made subject to such option by the copyright holder.

#Customizer dialog
LBL_Customizer_Title=Propri\u00e9t\u00e9s du projet
LBL_Customizer_Ok_Option=OK
LBL_Customizer_Cancel_Option=Annuler

AD_Customizer_Ok_Option=N/A
AD_Customizer_Cancel_Option=N/D

AN_ProjectCustomizer=Propri\u00e9t\u00e9s du projet
AD_ProjectCustomizer=Ouvre une bo\u00eete de dialogue permettant de configurer les propri\u00e9t\u00e9s importantes du projet.

#Default customizer pane
AD_CustomizerPane=N/D

#Default category view
AN_CatgoryView=Cat\u00e9gorie des propri\u00e9t\u00e9s
AD_CategoryView=N/D


LBL_Customizer_Categories=&Cat\u00e9gories\:

#DefaultAntProjectOperations:
LBL_Progress_Cleaning_Project=Nettoyage du projet
LBL_Progress_Deleting_File=Suppression du projet {0}
LBL_Project_cannot_be_deleted.=Impossible de supprimer le projet {0}.
LBL_Delete_Project_Caption=Supprimer le projet
LBL_Deleting_Project=Suppression du projet\:
LBL_Yes_Button=&Oui
LBL_No_Button=Non
LBL_Cancel_Button=Annuler
LBL_Copy_Button=Copier
LBL_Move_Button=D\u00e9placer
LBL_Rename_Button=Renommer
ACSD_Yes_Button=Bouton Oui
ACSD_No_Button=Bouton Non
ACSD_Cancel_Button=Bouton Annuler
ACSD_Copy_Button=Bouton Copier
ACSD_Move_Button=Bouton D\u00e9placer
ACSD_Rename_Button=Bouton Renommer
#Error messages:
#{0}: localized message of the original exception
ERR_Cannot_Move=Impossible de d\u00e9placer le projet. Raison\u00a0: {0}
#{0}: localized message of the original exception
ERR_Cannot_Copy=Impossible de copier le projet. Raison\u00a0: {0}
#{0}: localized message of the original exception
ERR_Cannot_Rename=Impossible de renommer le projet. Raison\u00a0: {0}

#DefaultProjectDeletePanel:
#{0}: project name
LBL_Pre_Delete_Warning=Ceci d\u00e9truira le projet "{0}" de sorte qu'il ne pourra plus \u00eatre ouvert dans NetBeans.
#{0}: project folder
LBL_Delete_Also_Sources=Supprimer &aussi les sources sous le r\u00e9pertoire "{0}"
ASCN_Pre_Delete_Warning=Avertissement avant la suppression
#{0}: project name
ACSD_Pre_Delete_Warning=Voulez-vous vraiment supprimer le projet "{0}"\u00a0?
#{0}: project folder
ACSN_Delete_Also_Sources=Supprimer aussi les sources sous le r\u00e9pertoire "{0}"
ACSD_Delete_Also_Sources=N/A
#accessible description for the whole dialog
ACSD_Delete_Panel=N/D

#ProjectCopyPanel:
#{0}: Integer 0 or 1. 0 for copy project dialog, 1 for move project dialog
#{1}: project's display name
LBL_Copy_Move_Dialog_Text={0,choice,0#Copier|1#D\u00e9placer} "{1}" dans\u00a0:
LBL_Project_Folder=&Dossier du projet\:
LBL_Project_Location=Emp&lacement du projet\:
LBL_Project_Name=&Nom du projet\:
LBL_Copying_Moving={0,choice,0#Copie du projet|1#D\u00e9placement du projet}
LBL_Browse=Parc&ourir...
ACSD_Browse=Bouton Parcourir
ACSN_Project_Folder=Dossier Projet
ACSD_Project_Folder=N/D
ACSN_Project_Location=Emplacement du projet
ACSD_Project_Location=N/D
ACSN_Project_Name=Nom du projet
ACSD_Project_Name=N/D
#accessible description for the whole dialog
#{0}: Integer 0 or 1. 0 for copy project dialog, 1 for move project dialog
ACSD_Copy_Move_Panel=N/D
LBL_Copy_Project_Caption=Copier le projet
#progress' name:
LBL_Copy_Project_Handle=Copie du projet
LBL_Move_Project_Caption=D\u00e9placer le projet
#progress' name:
LBL_Move_Project_Handle=D\u00e9placement du projet

#ProjectCopyPanel's warning message:
#temporary serves as an error:
WRN_External_Sources=Le projet ne peut pas \u00eatre copi\u00e9, car il pr\u00e9sente une ou plusieurs racines sources externes.
#the original warning message:
#WRN_External_Sources=The project has one or more external source roots, which cannot be copied.

#DefaultRenamePanel:
#{0}: project's display name
LBL_Rename_Dialog_Text=Renommer "{0}"\u00a0:
LBL_Also_Rename_Project_Folder=Renommer &aussi le dossier du projet
LBL_Renaming_Project=Attribution d'un nouveau nom au projet
ACSN_Also_Rename_Project_Folder=Renommer aussi le dossier du projet
ACSD_Also_Rename_Project_Folder=N/D
#accessible description for the whole dialog:
ACSD_Project_Rename=N/D
LBL_Rename_Project_Caption=Renommer le projet
#progress' name:
LBL_Rename_Project_Handle=Attribution d'un nouveau nom au projet

#Error messages for ProjectCopyPanel and DefaultRenamePanel:
ERR_Location_Does_Not_Exist=Cet emplacement de projet n'existe pas.
ERR_Project_Folder_Exists=Le dossier du projet existe d\u00e9j\u00e0.
ERR_Project_Name_Must_Entered=Un nom de projet doit \u00eatre saisi.
ERR_Location_Read_Only=L'emplacement du projet est en lecture seule.
ERR_Not_Valid_Filename=Le nom de projet "{0}" n''est pas un nom de fichier valide.

LBL_savingDataLabel=Enregistrement des donn\u00e9es du projet...
LBL_Saving_Project_data=Enregistrement des donn\u00e9es du projet
LBL_Saving_Project_data_progress=Enregistrement des donn\u00e9es du projet

TITLE_BrowseProjectLocation=Rechercher l'emplacement du projet
LBL_BrowseProjectLocation_OK_Button=OK
VCSWarningMessage=ATTENTION: Cette op\u00e9ration ne copiera pas les fichiers cach\u00e9s. Si ce projet est sous contr\u00f4le de version, la copie ne sera peut-\u00eatre pas versionn\u00e9e.
LBL_Pre_Delete_Question=\u00cates-vous s\u00fbr de vouloir la d\u00e9truire?

