/*
 * Shell32
 * French language support
 *
 * Copyright 1998 Juergen Schmied
 * Copyright 2006-2008 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
 */

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

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 | 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 remplacé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 ?"

/* 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                  "Recent"
 IDS_SENDTO                  "SendTo"
 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"
}

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."
}

#pragma code_page(default) /* Return to default encoding */
