/*
 * Shell32
 * French language support
 *
 * Copyright 1998 Juergen Schmied
 * Copyright 2006-2009 Jonathan Ernst
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#include "shresdef.h"

LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL

#pragma code_page(65001) /* UTF-8 */

MENU_001 MENU DISCARDABLE
BEGIN
	MENUITEM "&Grandes icônes",	FCIDM_SHVIEW_BIGICON
	MENUITEM "&Petites icônes",	FCIDM_SHVIEW_SMALLICON
	MENUITEM "&Liste",		FCIDM_SHVIEW_LISTVIEW
	MENUITEM "&Détails",		FCIDM_SHVIEW_REPORTVIEW
END

/*
 shellview background menu
*/
MENU_002 MENU DISCARDABLE
BEGIN
	POPUP ""
	BEGIN
	  POPUP "&Affichage"
	  BEGIN
	    MENUITEM "&Grandes icônes",	FCIDM_SHVIEW_BIGICON
	    MENUITEM "&Petites icônes",	FCIDM_SHVIEW_SMALLICON
	    MENUITEM "&Liste",		FCIDM_SHVIEW_LISTVIEW
	    MENUITEM "&Détails",	FCIDM_SHVIEW_REPORTVIEW
	  END
	  MENUITEM SEPARATOR
	  POPUP "Trier les &icônes"
	  BEGIN
	    MENUITEM "Par &nom",	0x30	/* column 0 */
	    MENUITEM "Par &type",	0x32	/* column 2 */
	    MENUITEM "Par t&aille",	0x31	/* ... */
	    MENUITEM "Par &date",	0x33
	    MENUITEM SEPARATOR
	    MENUITEM "T&ri automatique",	FCIDM_SHVIEW_AUTOARRANGE
	  END
	  MENUITEM "Aligner les icônes",	FCIDM_SHVIEW_SNAPTOGRID
	  MENUITEM SEPARATOR
	  MENUITEM "Actualiser",		FCIDM_SHVIEW_REFRESH
	  MENUITEM SEPARATOR
	  MENUITEM "Coller",			FCIDM_SHVIEW_INSERT
	  MENUITEM "Coller comme lien",	FCIDM_SHVIEW_INSERTLINK
	  MENUITEM SEPARATOR
	  POPUP "Nouveau"
	  BEGIN
	    MENUITEM "Nouveau d&ossier",	FCIDM_SHVIEW_NEWFOLDER
	    MENUITEM "Nouveau &lien",		FCIDM_SHVIEW_NEWLINK
	    MENUITEM SEPARATOR
	  END
	  MENUITEM SEPARATOR
	  MENUITEM "Propriétés",		FCIDM_SHVIEW_PROPERTIES
	END
END

/*
 shellview item menu
*/
MENU_SHV_FILE MENU DISCARDABLE
BEGIN
	POPUP ""
	BEGIN
	  MENUITEM "&Sélectionner"		FCIDM_SHVIEW_OPEN
	  MENUITEM "E&xplorer",		FCIDM_SHVIEW_EXPLORE
	  MENUITEM "&Ouvrir",		FCIDM_SHVIEW_OPEN
	  MENUITEM SEPARATOR
	  MENUITEM "C&ouper",		FCIDM_SHVIEW_CUT
	  MENUITEM "&Copier",		FCIDM_SHVIEW_COPY
	  MENUITEM SEPARATOR
	  MENUITEM "Créer un &lien",	FCIDM_SHVIEW_CREATELINK
	  MENUITEM "&Supprimer",	FCIDM_SHVIEW_DELETE
	  MENUITEM "&Renommer",		FCIDM_SHVIEW_RENAME
	  MENUITEM SEPARATOR
	  MENUITEM "&Propriétés",	FCIDM_SHVIEW_PROPERTIES
	END
END

MENU_CPANEL MENU
BEGIN
    POPUP "&Fichier"
    BEGIN
        MENUITEM SEPARATOR
        MENUITEM "&Quitter", IDM_CPANEL_EXIT
    END

    POPUP "&Affichage"
    BEGIN
        MENUITEM "&Grandes icônes", FCIDM_SHVIEW_BIGICON
        MENUITEM "&Petites icônes", FCIDM_SHVIEW_SMALLICON
        MENUITEM "&Liste", FCIDM_SHVIEW_LISTVIEW
        MENUITEM "&Détails", FCIDM_SHVIEW_REPORTVIEW
    END

    POPUP "Ai&de"
    BEGIN
        MENUITEM "À &propos du panneau de configuration...", IDM_CPANEL_ABOUT
    END
END

SHBRSFORFOLDER_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | DS_MODALFRAME | DS_SETFONT | DS_3DLOOK
CAPTION "Parcourir les dossiers"
FONT 8, "MS Shell Dlg"
{
 DEFPUSHBUTTON "OK", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
 PUSHBUTTON "Annuler", 2, 134, 176, 50, 12, WS_GROUP | WS_TABSTOP
 LTEXT "", IDD_TITLE, 4, 4, 180, 12
 LTEXT "", IDD_STATUS, 4, 25, 180, 12
 CONTROL "", IDD_TREEVIEW, "SysTreeView32",
 	TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT |
	WS_BORDER | WS_TABSTOP,
	4, 40, 180, 120
}

SHNEWBRSFORFOLDER_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 218, 196
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX | DS_MODALFRAME | DS_SETFONT | DS_3DLOOK
CAPTION "Parcourir les dossiers"
FONT 8, "MS Shell Dlg"
{
 LTEXT "", IDD_TITLE, 10, 8, 198, 24
 LTEXT "", IDD_STATUS, 10, 25, 198, 12
 LTEXT "Dossier :", IDD_FOLDER, 10, 156, 40, 12
 CONTROL "", IDD_TREEVIEW, "SysTreeView32",
	TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT |
	WS_BORDER | WS_TABSTOP,
	12, 38, 194, 105
 EDITTEXT IDD_FOLDERTEXT, 46, 150, 160, 14, WS_BORDER | WS_GROUP | WS_TABSTOP
 PUSHBUTTON "&Créer un nouveau dossier", IDD_MAKENEWFOLDER, 12, 174, 70, 14, WS_GROUP | WS_TABSTOP
 DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
 PUSHBUTTON "Annuler", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP
}

SHELL_YESTOALL_MSGBOX DIALOG 200, 100, 280, 90
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Message"
FONT 8, "MS Shell Dlg"
{
    DEFPUSHBUTTON "&Oui", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP
    PUSHBUTTON "Oui pour &tous", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP
    PUSHBUTTON "&Non", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP
    PUSHBUTTON "&Annuler", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP
    ICON "", IDD_ICON, 10, 10, 16, 16
    LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0
}

SHELL_ABOUT_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 230, 152
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "À propos de %s"
FONT 10, "MS Shell Dlg"
{
 DEFPUSHBUTTON "OK", IDOK, 153, 133, 70, 12, WS_TABSTOP
 PUSHBUTTON "&Licence de Wine...", IDC_ABOUT_LICENSE, 153, 113, 70, 12, WS_TABSTOP
 LISTBOX IDC_ABOUT_LISTBOX, 8, 65, 137, 82, LBS_NOTIFY | WS_VSCROLL | WS_BORDER
 ICON "", stc1, 10, 10, 30, 30
 LTEXT "", IDC_ABOUT_STATIC_TEXT1, 42, 10, 137, 10
 LTEXT "", IDC_ABOUT_STATIC_TEXT2, 42, 22, 137, 10
 LTEXT "Exécuté avec %s", IDC_ABOUT_STATIC_TEXT3, 42, 34, 170, 10
 LTEXT "Wine est une réalisation de :", IDC_ABOUT_WINE_TEXT, 8, 55, 214, 10
}

SHELL_RUN_DLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION ""
FONT 8, "MS Shell Dlg"
{
 ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE
 LTEXT "Entrez le nom d'un programme, d'un dossier, d'un document ou d'une ressource Internet, et Wine l'ouvrira pour vous.", 12289, 36, 11, 182, 18
 LTEXT "&Ouvrir :", 12305, 7, 39, 24, 10
 CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100
 DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP
 PUSHBUTTON "Annuler", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP
 PUSHBUTTON "&Parcourir...", 12288, 170, 63, 50, 14, WS_TABSTOP
}

STRINGTABLE
{
        /* columns in the shellview */
	IDS_SHV_COLUMN1		"Fichier"
	IDS_SHV_COLUMN2		"Taille"
	IDS_SHV_COLUMN3		"Type"
	IDS_SHV_COLUMN4		"Modifié"
	IDS_SHV_COLUMN5		"Attributs"
	IDS_SHV_COLUMN6		"Capacité"
	IDS_SHV_COLUMN7		"Espace disponible"
	IDS_SHV_COLUMN8		"Nom"
	IDS_SHV_COLUMN9		"Commentaires"
	IDS_SHV_COLUMN10	"Propriétaire"
	IDS_SHV_COLUMN11	"Groupe"
	IDS_SHV_COLUMN_DELFROM	"Emplacement d'origine"
	IDS_SHV_COLUMN_DELDATE	"Date de suppression"

        /* special folders */
	IDS_DESKTOP		"Bureau"
	IDS_MYCOMPUTER		"Poste de travail"
	IDS_RECYCLEBIN_FOLDER_NAME      "Corbeille"
	IDS_CONTROLPANEL	"Control Panel"

        /* context menus */
	IDS_VIEW_LARGE		"&Grandes icônes"
	IDS_VIEW_SMALL		"&Petites icônes"
	IDS_VIEW_LIST		"&Liste"
	IDS_VIEW_DETAILS	"&Détails"
	IDS_SELECT		"Sélectionner"
	IDS_OPEN		"Ouvrir"

	IDS_CREATEFOLDER_DENIED "Impossible de créer le nouveau dossier : permission refusée."
	IDS_CREATEFOLDER_CAPTION "Erreur lors de la création du nouveau dossier"
	IDS_DELETEITEM_CAPTION "Confirmer la suppression du fichier"
	IDS_DELETEFOLDER_CAPTION "Confirmer la suppression du dossier"
	IDS_DELETEITEM_TEXT "Êtes-vous sûr de vouloir supprimer '%1'?"
	IDS_DELETEMULTIPLE_TEXT "Êtes-vous sûr de vouloir supprimer ces %1 éléments ?"
	IDS_DELETESELECTED_TEXT "Êtes-vous sûr de vouloir supprimer le(les) élément(s) séléectionné(s) ?"
	IDS_TRASHITEM_TEXT "Êtes-vous sûr de vouloir mettre « %1 » dans la corbeille ?"
	IDS_TRASHFOLDER_TEXT "Êtes-vous sûr de vouloir mettre « %1 » et tout ce qu'il contient dans la corbeille ?"
	IDS_TRASHMULTIPLE_TEXT "Êtes-vous sûr de vouloir mettre ces %1 éléments dans la corbeille ?"
	IDS_CANTTRASH_TEXT "L'élément « %1 » ne peut pas être mis dans la corbeille. Souhaitez-vous le supprimer à la place ?"
	IDS_OVERWRITEFILE_TEXT "Ce dossier contient déjà un fichier nommé « %1 ».\n\nVoulez-vous le remplacer ?"
	IDS_OVERWRITEFILE_CAPTION "Confirmer l'écrasement du fichier"
	IDS_OVERWRITEFOLDER_TEXT "Ce dossier contient déjà un dossier nommé « %1 ».\n\n"\
	    "Si des fichiers dans le dossier de destination ont le même nom que ceux dans le dossier\n"\
	    "sélectionné, ils seront écrasés. Voulez-vous quand même déplacer ou copier\n"\
	    "le dossier ?"

        /* message box strings */
       IDS_RESTART_TITLE       "Redémarrer"
       IDS_RESTART_PROMPT      "Voulez-vous simuler le redémarrage de Windows ?"
       IDS_SHUTDOWN_TITLE      "Arrêter"
       IDS_SHUTDOWN_PROMPT     "Voulez-vous fermer la session Wine ?"

        /* Run File dialog */
        IDS_RUNDLG_ERROR           "Impossible d'afficher la boîte de dialogue « Exécuter » (erreur interne)"
        IDS_RUNDLG_BROWSE_ERROR    "Impossible d'afficher la boîte de dialogue « Parcourir » (erreur interne)"
        IDS_RUNDLG_BROWSE_CAPTION  "Parcourir"
        IDS_RUNDLG_BROWSE_FILTER   "Fichiers exécutables\0*.exe\0Tous les fichiers\0*.*\0\0"

/* shell folder path default values */
 IDS_PROGRAMS                "Menu Démarrer\\Programmes"
 IDS_PERSONAL                "Mes documents"
 IDS_FAVORITES               "Favoris"
 IDS_STARTUP                 "Menu Démarrer\\Programmes\\Démarrage"
 IDS_RECENT                  "Documents récents"
 IDS_SENDTO                  "Envoyer vers"
 IDS_STARTMENU               "Menu Démarrer"
 IDS_MYMUSIC                 "Ma musique"
 IDS_MYVIDEO                 "Mes vidéos"
 IDS_DESKTOPDIRECTORY        "Bureau"
 IDS_NETHOOD                 "Voisinage Réseau"
 IDS_TEMPLATES               "Modèles"
 IDS_APPDATA                 "Application Data"
 IDS_PRINTHOOD               "Voisinage d'impression"
 IDS_LOCAL_APPDATA           "Local Settings\\Application Data"
 IDS_INTERNET_CACHE          "Local Settings\\Temporary Internet Files"
 IDS_COOKIES                 "Cookies"
 IDS_HISTORY                 "Local Settings\\Historique"
 IDS_PROGRAM_FILES           "Program Files"
 IDS_MYPICTURES              "Mes images"
 IDS_PROGRAM_FILES_COMMON    "Program Files\\Fichiers communs"
 IDS_COMMON_DOCUMENTS        "Documents"
 IDS_ADMINTOOLS              "Menu Démarrer\\Programmes\\Outils d'administration"
 IDS_COMMON_MUSIC            "Documents\\Ma musique"
 IDS_COMMON_PICTURES         "Documents\\Mes images"
 IDS_COMMON_VIDEO            "Documents\\Mes vidéos"
 IDS_CDBURN_AREA             "Local Settings\\Application Data\\Microsoft\\CD Burning"

 IDS_NEWFOLDER		"Nouveau dossier"

 IDS_CPANEL_TITLE            "Panneau de configuration de Wine"
 IDS_CPANEL_NAME             "Nom"
 IDS_CPANEL_DESCRIPTION      "Description"

 IDS_SHLEXEC_NOASSOC         "Aucun programme Windows n'est configuré pour ouvrir ce type de fichier."
}

STRINGTABLE
{
IDS_LICENSE_CAPTION,            "Licence de Wine"
IDS_LICENSE,
"Wine est un logiciel libre ; vous pouvez le redistribuer et/ou \
le modifier suivant les termes de la Licence Générale Publique Limitée GNU \
telle que publiée par la Free Software Foundation ; soit la version 2.1 \
de la License, soit (à votre gré) toute version ultérieure.\n\n\
Wine est distribué dans l’espoir qu'il sera utile, mais \
SANS AUCUNE GARANTIE : sans même la garantie implicite de \
COMMERCIALISABILITÉ ou d’ADÉQUATION À UN OBJECTIF PARTICULIER. Consultez \
la Licence Générale Publique Limitée pour plus de détails.\n\n\
Vous devriez avoir reçu une copie de la Licence Générale Publique Limitée \
GNU avec Wine ; si ce n’est pas le cas, écrivez à la : \
Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, \
MA 02110-1301, USA."
}
