###############################################################################
# Copyright (c) 2001, 2004 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 API and implementation
###############################################################################

TITLE_WSEXPLORER=Explorateur de services Web

# Tree Nodes
ALT_OPEN=Ouvrir
ALT_CLOSE=Fermer

# Perspective Toolbar
ALT_BACK=Pr\u00e9c\u00e9dent
ALT_FORWARD=Suivant
ALT_ACTION_ENGINE=Moteur d'enregistrement des actions
ALT_UDDI_PERSPECTIVE=Page UDDI
ALT_WSIL_PERSPECTIVE=Page WSIL
ALT_WSDL_PERSPECTIVE=Page WSDL
ALT_FAVORITES_PERSPECTIVE=Favoris

# Toolbars
ALT_DOUBLE_CLICK_TO_MAXIMIZE=Cliquez deux fois pour agrandir
ALT_DOUBLE_CLICK_TO_RESTORE=Cliquez deux fois pour restaurer

# SetDefaultViewTool
ALT_BACK_TO_TOP=Retour en haut de la page

# Common Actions
ALT_REFRESH=R\u00e9g\u00e9n\u00e9rer
ALT_CLEAR=Effacer
ALT_RESULTS=R\u00e9sultats

# Common Labels
ALT_NAVIGATOR=Navigateur
ALT_ACTIONS=Actions
ALT_STATUS=Etat
ALT_OTHER_ACTIONS=Autres actions
FORM_BUTTON_GO=&nbsp;&nbsp;OK&nbsp;&nbsp;
FORM_BUTTON_RESET=Restaurer
FORM_BUTTON_CANCEL=Annuler
FORM_LABEL_ACTIONS=Actions
FORM_LABEL_ACTIONS_NONE=Aucune

# Placeholder for blank table entries
TABLE_BLANK_PLACEHOLDER=--

# Common Form Control Titles
FORM_CONTROL_TITLE_SELECT_ALL_CHECK_BOX=S\u00e9lectionner tout
FORM_CONTROL_TITLE_SELECT_ROW_CHECK_BOX=S\u00e9lectionner la ligne

# Common Messages
MSG_ERROR_UNEXPECTED=IWAB0135E Une erreur inattendue s'est produite.
MSG_ERROR_NO_ACTION_SELECTED=IWAB0124E S\u00e9lectionnez une action.
MSG_ERROR_NO_NODE_SELECTED=IWAB0125E S\u00e9lectionnez un noeud.
MSG_SUBMIT_IN_PROGRESS=Veuillez patienter. L'op\u00e9ration est encore en cours d'ex\u00e9cution.
MSG_LOAD_IN_PROGRESS=Veuillez patienter. Chargement du formulaire en cours...

#LaunchWebServiceWizardAction
ALT_LAUNCH_WEB_SERVICE_WIZARD=Lancer l'assistant de services Web
FORM_LABEL_CHOOSE_WIZARD=S\u00e9lectionnez un assistant \u00e0 lancer :
FORM_RADIO_WEB_SERVICE_CLIENT_WIZARD=Client du service Web
FORM_RADIO_WEB_SERVICE_SKELETON_WIZARD=Squelette du service Web
MSG_ERROR_WIZARD_ALREADY_RUNNING=IWAB0126E Un assistant de service Web est d\u00e9j\u00e0 en cours d'ex\u00e9cution.  Commencez par fermer l'assistant que vous utilisez avant de lancer un autre assistant.
MSG_ERROR_WSDL_URL_IS_UNREACHABLE=IWAB0127E Le document WSDL est inaccessible.

# ImportToFileSystemAction
ALT_WSIL_IMPORT_TO_FS=Importer un document WSIL dans le syst\u00e8me de fichiers
ALT_WSDL_IMPORT_TO_FS=Importer un document WSDL dans le syst\u00e8me de fichiers
MSG_ERROR_RETRIEVING_WSDL_DOC=IWAB0128E Impossible d'extraire le document WSDL.
MSG_ERROR_RETRIEVING_WSIL_DOC=IWAB0129E Impossible d'extraire le document WSIL.
MSG_IMPORT_WSDL_SUCCESSFUL=Le document WSDL a \u00e9t\u00e9 import\u00e9.
MSG_IMPORT_WSIL_SUCCESSFUL=Le document WSIL a \u00e9t\u00e9 import\u00e9.

# ImportToWorkbenchAction
ALT_IMPORT_WSDL_TO_WORKBENCH=Importer un document WSDL dans le plan de travail
FORM_LABEL_IMPORT_TO_WORKBENCH_DESC=S\u00e9lectionnez un projet de plan de travail pour y sauvegarder le fichier WSDL. Vous pouvez aussi changer le nom du fichier WSDL.
WEB_PROJECT_NAME=Projet Web :
WORKBENCH_PROJECT_NAME=Projet de plan de travail :
LABEL_IMPORT_WSDL=Importer le document WSDL
LABEL_IMPORT_TO_WSIL=Importer comme r\u00e9f\u00e9rence de service dans un document WSIL
IMPORTED_WSDL_FILE_NAME=Nom du fichier WSDL :
WSIL_FILE_NAME=Nom du fichier WSIL :
MSG_ERROR_FILE_OVERWRITE_DISABLED=Impossible de cr\u00e9er le fichier "%2" relativement au chemin "%1" car le remplacement automatique des fichiers n'a pas \u00e9t\u00e9 activ\u00e9. Voulez-vous l'activer pour ce fichier ?
MSG_ERROR_INVALID_WORKBENCH_PROJECT=IWAB0130E S\u00e9lectionnez un projet de plan de travail.
MSG_ERROR_INVALID_WSDL_FILE_NAME=IWAB0131E Nom de fichier non valide.
MSG_ERROR_INVALID_WSIL_FILE_NAME=IWAB0470E Nom de fichier WSIL non valide.
MSG_ERROR_NO_IMPORT_OPTION_SELECTED=IWAB0471E Aucune option d'importation n'est s\u00e9lectionn\u00e9e.  Choisissez au moins une option d'importation.
MSG_ERROR_WRITING_TEMP_FILE_TO_FS=IWAB0132E Impossible d'enregistrer le fichier temporaire.
MSG_INFO_IMPORT_TO_WORKBENCH_SUCCESSFUL=IWAB0314I %1 a \u00e9t\u00e9 import\u00e9 dans le plan de travail.
MSG_INFO_IMPORT_SERVICE_REF_TO_WSIL_SUCCESSFUL=IWAB0472I La r\u00e9f\u00e9rence de service a \u00e9t\u00e9 import\u00e9e dans %1.

# CheckWorkbenchFileReadOnlyAction
MSG_ERROR_FILE_CHECKOUT_DISABLED=Impossible de cr\u00e9er le fichier "%2" relativement au chemin "%1" car la r\u00e9servation automatique des fichiers n'a pas \u00e9t\u00e9 activ\u00e9. Voulez-vous l'activer pour ce fichier ?

# ClearNodeAction
MSG_INFO_NODE_CLEARED=IWAB0133I %1 effac\u00e9.

# Table twistees
ALT_TWIST_OPENED=Masquer
ALT_TWIST_CLOSED=D\u00e9velopper

# WSDL Browser
FORM_LINK_BROWSE=Parcourir...
TITLE_WSDL_BROWSER=Navigateur de WSDL - %1
FORM_LABEL_WSDL_SOURCE=S\u00e9lectionnez la source WSDL :
FORM_LABEL_WSDL_SOURCE_WEBPROJECTS=Projets Web
FORM_LABEL_WSDL_SOURCE_FAVORITES=Favoris
FORM_LABEL_WEB_PROJECT=Projet Web
FORM_LABEL_WSDL_URL=URL WSDL
FORM_BUTTON_REFRESH=R\u00e9g\u00e9n\u00e9rer
ALT_WSDL_BROWSER=Navigateur WSDL
WSDL_TYPE_SERVICE_INTERFACES=Interfaces de service
WSDL_TYPE_SERVICES=Services

# Calendar Browser
TITLE_CALENDAR_BROWSER=Navigateur de calendrier
# 2 character abbreviations for days of the week.
FORM_LABEL_SH_SUNDAY=Di
FORM_LABEL_SH_MONDAY=Lu
FORM_LABEL_SH_TUESDAY=Ma
FORM_LABEL_SH_WEDNESDAY=Me
FORM_LABEL_SH_THURSDAY=Je
FORM_LABEL_SH_FRIDAY=Ve
FORM_LABEL_SH_SATURDAY=Sa
# Months of the year
FORM_LABEL_MONTH=Mois :
FORM_LABEL_JANUARY=Janvier
FORM_LABEL_FEBRUARY=F\u00e9vrier
FORM_LABEL_MARCH=Mars
FORM_LABEL_APRIL=Avril
FORM_LABEL_MAY=Mai
FORM_LABEL_JUNE=Juin
FORM_LABEL_JULY=Juillet
FORM_LABEL_AUGUST=Ao\u00fbt
FORM_LABEL_SEPTEMBER=Septembre
FORM_LABEL_OCTOBER=Octobre
FORM_LABEL_NOVEMBER=Novembre
FORM_LABEL_DECEMBER=D\u00e9cembre
FORM_LABEL_YEAR=Ann\u00e9e :
FORM_LABEL_TIME=Heure :
FORM_LINK_TODAY=Aujourd'hui
FORM_LINK_PREVIOUS_YEAR=<<
FORM_LINK_PREVIOUS_MONTH=<
FORM_LINK_NEXT_MONTH=>
FORM_LINK_NEXT_YEAR=>>
ALT_PREVIOUS_YEAR=Ann\u00e9e pr\u00e9c\u00e9dente
ALT_PREVIOUS_MONTH=Mois pr\u00e9c\u00e9dent
ALT_NEXT_MONTH=Mois suivant
ALT_NEXT_YEAR=Ann\u00e9e suivante
ALT_TODAY=Aujourd'hui
ALT_CALENDAR_BROWSER=Navigateur de calendrier
MSG_ERROR_INVALID_TIME_FORMAT=IWAB0368E L'heure n'a pas \u00e9t\u00e9 indiqu\u00e9e au format HH:MM:SS[.SSS]. Voulez-vous utiliser le format en cours ?

# Action engine
TITLE_ACTION_RECORDER=Moteur d'enregistrement des actions
FORM_LABEL_MODE=Mode :
FORM_LABEL_MODE_PLAY=Lecture
FORM_LABEL_MODE_STOP=Arr\u00eat
FORM_LABEL_MODE_RECORD=Enregistrement
FORM_LABEL_SAVE=Sauvegarder
FORM_LABEL_PLAY_FILE=Lire le fichier :
MSG_ERROR_INVALID_PLAY_FILE=IWAB0362E Entrez un fichier \u00e0 lire.

# Frame titles
FRAME_TITLE_PERSPECTIVE_WORKAREA=Explorateur de services Web - Zone de travail
FRAME_TITLE_PERSPECTIVE_TOOLBAR=Explorateur de services Web - Barre d'outils
FRAME_TITLE_PERSPECTIVE_CONTENT=Explorateur de services Web - Contenu de la page
FRAME_TITLE_WSDL_TOOLBAR=Navigateur WSDL - Barre d'outils
FRAME_TITLE_WSDL_CONTENT=Navigateur WSDL - Contenu

# Form titles
FORM_TITLE_PAGE_LOADER=Chargeur de pages
FORM_TITLE_PAGE_CONTENT=Contenu de la page charg\u00e9e
FORM_TITLE_LAUNCH_WEBSERVICE_WIZARD=Formulaire Assistant de lancement d'un service Web
FORM_TITLE_IMPORT_TO_WORKBENCH=Formulaire Importation dans le plan de travail
