# NLS_ENCODING=UNICODE
#-------------------------------------------------------------------------------
# Copyright (c) 2000, 2008 IBM Corporation and others.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
#
# Contributors:
# IBM Corporation - initial implementation.
#-------------------------------------------------------------------------------
# NLS_MESSAGEFORMAT_VAR

# Plug-in
pluginName=Interface utilisateur d'EPF Composer RCP
productName=Composeur EPF
providerName=Eclipse.org

# About text
aboutText=Eclipse Process Framework Composer\n\
\n\
Version : {0}\n\
\n\
(c) Copyright Eclipse contributors and others {1}, {2}. All Rights Reserved.\n

# Category
methodCategoryName=M\u00e9thode

# Views
welcomeViewName=Bienvenue

# Actions
globalActionSet=Jeu d'actions global
newAction=&Nouveau
newActionTooltip=Nouveau
openAction=&Ouvrir...
openActionTooltip=Ouvrir
searchAction=&Rechercher...
searchActionTooltip=Rechercher
welcomeAction=&Bienvenue
welcomeActionToolTip=Bienvenue

# Tooltips
shortcut.overview.tooltip=Retourner \u00e0 la page G\u00e9n\u00e9ralit\u00e9s
shortcut.tutorials.tooltip=Retourner \u00e0 la page Tutoriel
shortcut.firststeps.tooltip=Retourner \u00e0 la page Premiers pas
shortcut.webresources.tooltip=Retourner \u00e0 la page Ressources Web       

#Action Set
actionSet.description = Actions de la barre d'outils du syst\u00e8me d'aide
actionSet.label = Syst\u00e8me d'aide
searchAction.label = &Rechercher dans l'aide
searchAction.tooltip = Rechercher dans l'aide
dynamicHelpAction.label = Aide &dynamique 
dynamicHelpAction.tooltip = Aide dynamique

#Activities/Capabilities
activity.general=Importer et exporter des projets et des ressources
activity.general.desc=Utilisez les fonctions standard Importer/Exporter le projet/les ressources d'Eclipse.
activity.team.cvs=Prise en charge CVS
activity.team.cvs.desc=Utilisez le syst\u00e8me CVS (Concurrent Versions System) pour g\u00e9rer les ressources.
activity.team=Prise en charge de l'\u00e9quipe principale
activity.team.desc=Partagez des projets \u00e0 l'aide des syst\u00e8mes de gestion de configuration.

activity.cat.general=Dispositions g\u00e9n\u00e9rales
activity.cat.general.desc=Utilisez les fonctions standard d'Eclipse.
activity.cat.team=Equipe
activity.cat.team.desc=Utilisez les syst\u00e8mes de gestion de configuration pour g\u00e9rer les ressources.

PreferencePages.Capabilities = Fonctions
PreferencePages.Capabilities.activityName = &Fonctions
PreferencePages.Capabilities.categoryName = &Fonctions
PreferencePages.Capabilities.activityPromptButton = &Invite lors de l'activation des fonctions
PreferencePages.Capabilities.activityPromptButtonTooltip = Lorsqu'une fonction est utilis\u00e9e pour la premi\u00e8re fois, une invite s'affiche et exige l'activation des fonctions
PreferencePages.Capabilities.captionMessage = Les fonctions vous permettent d'activer ou de d\u00e9sactiver plusieurs composants de produit.  Ces fonctions sont regroup\u00e9es selon un ensemble de cat\u00e9gories pr\u00e9d\u00e9finies.
