/*
 * Program Manager
 *
 * Copyright 1996 Ulrich Schmid
 * French Fr.rc by Pablo Saratxaga
 * Copyright 2002 Sylvain Petreolle
 * Copyright 2006 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 "progman.h"

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

LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL

/* Menu */

MAIN_MENU MENU
{
 POPUP "&Fichier" {
   MENUITEM "&Nouveau...",              PM_NEW
   MENUITEM "O&uvrir\tEntrée",             PM_OPEN
   MENUITEM "&Déplacer...\tF7",             PM_MOVE,      GRAYED
   MENUITEM "&Copier...\tF8",             PM_COPY,      GRAYED
   MENUITEM "&Supprimer\tSuppr",           PM_DELETE
   MENUITEM "&Propriétés...\tAlt+Entrée",       PM_ATTRIBUTES
   MENUITEM SEPARATOR
   MENUITEM "E&xécuter...",          PM_EXECUTE
   MENUITEM SEPARATOR
   MENUITEM "&Quitter Windows...",             PM_EXIT
 }
 POPUP "&Options" {
   MENUITEM "Réorg&anisation automatique",  PM_AUTO_ARRANGE
   MENUITEM "&Réduire à l'utilisation",    PM_MIN_ON_RUN
   MENUITEM "&Enregistrer la configuration en quittant", PM_SAVE_SETTINGS
 }
 POPUP "F&enêtres" {
   MENUITEM "&Cascade\tMaj+F5",       PM_OVERLAP
   MENUITEM "&Mosaïque\tMaj+F4",  PM_SIDE_BY_SIDE
   MENUITEM "&Réorganiser les icônes",       PM_ARRANGE
 }
 
 POPUP "Aid&e" {
   MENUITEM "&Sommaire",         PM_CONTENTS
   MENUITEM "&Rechercher...",           PM_SEARCH
   MENUITEM SEPARATOR
   MENUITEM "&Utiliser l'aide",     PM_HELPONHELP
   MENUITEM "Didacticiel &Windows",         PM_TUTORIAL
   MENUITEM SEPARATOR

   POPUP "&Info..." {
     MENUITEM "&Licence",        PM_LICENSE
     MENUITEM "AUCUNE &GARANTIE",    PM_NO_WARRANTY
     MENUITEM "À &propos de Wine",     PM_ABOUT_WINE
   }
 }
}

/* Dialog `New' */

DIALOG_NEW DIALOG 0, 0, 170, 65
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Nouveau"
{
RADIOBUTTON   "",                 PM_NEW_GROUP,    10, 15,  10, 15
LTEXT         "&Groupe de programmes",   -1,    20, 18,  80, 15
RADIOBUTTON   "",                 PM_NEW_PROGRAM,  10, 35,  10, 15
LTEXT         "&Programme", -1,  20, 38,  80, 15
DEFPUSHBUTTON "OK",          IDOK,           105,  5,  60, 15, WS_TABSTOP
PUSHBUTTON    "Annuler",      IDCANCEL,       105, 25,  60, 15, WS_TABSTOP
PUSHBUTTON    "Aid&e",        PM_HELP,        105, 45,  60, 15, WS_TABSTOP
}

/* Dialog `Move' */

DIALOG_MOVE DIALOG 0, 0, 250, 65
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Déplacer un programme"
{
LTEXT         "Déplacer le programme :",    -1,            5,  5,  90, 15
LTEXT         "",                     PM_PROGRAM,         95,  5,  90, 15
LTEXT         "À partir du groupe :", -1,            5, 13,  90, 15
LTEXT         "",                     PM_FROM_GROUP,      95, 13,  90, 15
LTEXT         "&Vers le groupe :",   PM_TO_GROUP_TXT,     5, 28, 140, 15
COMBOBOX                              PM_TO_GROUP,         5, 38, 140, 50, WS_TABSTOP | CBS_DROPDOWNLIST
DEFPUSHBUTTON "OK",              IDOK,              185,  5,  60, 15, WS_TABSTOP
PUSHBUTTON    "Annuler",          IDCANCEL,          185, 25,  60, 15, WS_TABSTOP
PUSHBUTTON    "Aid&e",            PM_HELP,           185, 45,  60, 15, WS_TABSTOP
}

/* Dialog `Copy' */

DIALOG_COPY DIALOG 0, 0, 250, 65
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Copier un programme"
{
LTEXT         "Copier le programme :",    -1,            5,  5,  90, 15
LTEXT         "",                     PM_PROGRAM,         95,  5,  90, 15
LTEXT         "À partir du groupe :", -1,            5, 13,  90, 15
LTEXT         "",                     PM_FROM_GROUP,      95, 13,  90, 15
LTEXT         "&Vers le groupe :",   PM_TO_GROUP_TXT,     5, 28, 140, 15
COMBOBOX                              PM_TO_GROUP,         5, 38, 140, 50, WS_TABSTOP | CBS_DROPDOWNLIST
DEFPUSHBUTTON "OK",              IDOK,              185,  5,  60, 15, WS_TABSTOP
PUSHBUTTON    "Annuler",          IDCANCEL,          185, 25,  60, 15, WS_TABSTOP
PUSHBUTTON    "Aid&e",            PM_HELP,           185, 45,  60, 15, WS_TABSTOP
}

/* Dialog `Group attributes' */

DIALOG_GROUP DIALOG 0, 0, 230, 65
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Propriétés de groupe"
{
LTEXT     "&Nom :", PM_DESCRIPTION_TXT,   05, 20,  59, 10
EDITTEXT                            PM_DESCRIPTION,       70, 18,  90, 15, WS_TABSTOP
LTEXT     "&Fichier du groupe :",        PM_FILE_TXT,          05, 40,  63, 10
EDITTEXT                            PM_FILE,              70, 38,  90, 15, WS_TABSTOP
DEFPUSHBUTTON "OK",            IDOK,                165,  5,  60, 15, WS_TABSTOP
PUSHBUTTON    "Annuler",        IDCANCEL,            165, 25,  60, 15, WS_TABSTOP
PUSHBUTTON    "Aid&e",          PM_HELP,             165, 45,  60, 15, WS_TABSTOP
}

/* Dialog `Program attributes' */

DIALOG_PROGRAM DIALOG 0, 0, 250, 105
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Propriétés de programme"
{
LTEXT         "&Nom :",  PM_DESCRIPTION_TXT,   05, 11,  60, 10
EDITTEXT                                   PM_DESCRIPTION,       80, 10,  90, 15, WS_TABSTOP
LTEXT         "&Ligne de commande :", PM_COMMAND_LINE_TXT,  05, 26,  74, 10
EDITTEXT                                   PM_COMMAND_LINE,      80, 25,  90, 15, WS_TABSTOP
LTEXT         "Répertoire de tra&vail :",    PM_DIRECTORY_TXT,     05, 42,  74, 10
EDITTEXT                                   PM_DIRECTORY,         80, 40,  90, 15, WS_TABSTOP
LTEXT         "&Touche de raccourci :",      PM_HOT_KEY_TXT,       05, 56,  74, 10
EDITTEXT                                   PM_HOT_KEY,           80, 55,  90, 15, WS_TABSTOP
ICON          "",                          PM_ICON,              20, 72
CHECKBOX      "",                          PM_SYMBOL,            80, 75,  10, 10, WS_TABSTOP
LTEXT         "Réduire à l'&utilisation",       -1,             95, 75,  75, 10
DEFPUSHBUTTON "OK",                   IDOK,                185,  5,  60, 15, WS_TABSTOP
PUSHBUTTON    "Annuler",               IDCANCEL,            185, 25,  60, 15, WS_TABSTOP
PUSHBUTTON    "Pa&rcourir...",               PM_BROWSE,           185, 45,  60, 15, WS_TABSTOP
PUSHBUTTON    "&Changer l'icône...", PM_OTHER_SYMBOL,     185, 65,  60, 15, WS_TABSTOP
PUSHBUTTON    "Aid&e",                 PM_HELP,             185, 85,  60, 15, WS_TABSTOP
}

/* Dialog `Symbol' */

DIALOG_SYMBOL DIALOG 0, 0, 200, 85
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Changer l'icône"
{
LTEXT     "&Nom du fichier :",    PM_ICON_FILE_TXT,    5, 7,  56, 10
EDITTEXT                         PM_ICON_FILE,       5, 16, 124, 14, WS_TABSTOP
LTEXT     "Icône a&ctuelle :", PM_SYMBOL_LIST_TXT,  5, 33, 125, 10
COMBOBOX                         PM_SYMBOL_LIST,      5, 43, 125, 50,
   CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_OWNERDRAWFIXED | WS_TABSTOP
DEFPUSHBUTTON "OK",         IDOK,              135,  5,  60, 15, WS_TABSTOP
PUSHBUTTON    "Annuler",     IDCANCEL,          135, 25,  60, 15, WS_TABSTOP
PUSHBUTTON    "Pa&rcourir...",    PM_BROWSE,         135, 45,  60, 15, WS_TABSTOP
PUSHBUTTON    "Aid&e",       PM_HELP,           135, 65,  60, 15, WS_TABSTOP
}

/* Dialog `Execute' */

DIALOG_EXECUTE DIALOG 0, 0, 200, 85
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Exécuter un programme"
{
LTEXT     "&Ligne de commande :", -1,   05, 15, 120, 10
EDITTEXT                               PM_COMMAND, 05, 25, 120, 15, WS_TABSTOP
CHECKBOX      "",                      PM_SYMBOL,  05, 45,  10, 10, WS_TABSTOP
LTEXT         "Réduire à l'&utilisation",   -1,   18, 46, 106, 10
DEFPUSHBUTTON "OK",               IDOK,      135,  5,  60, 15, WS_TABSTOP
PUSHBUTTON    "Annuler",           IDCANCEL,  135, 25,  60, 15, WS_TABSTOP
PUSHBUTTON    "Pa&rcourir...",          PM_BROWSE, 135, 45,  60, 15, WS_TABSTOP
PUSHBUTTON    "Aid&e",             PM_HELP,   135, 65,  60, 15, WS_TABSTOP
}

/* Strings */

STRINGTABLE DISCARDABLE
{
IDS_PROGRAM_MANAGER,		"Gestionnaire de programmes"
IDS_ERROR,			"ERREUR"
IDS_WARNING,			"ATTENTION"
IDS_INFO,			"Information"
IDS_DELETE,			"Supprimer"
IDS_DELETE_GROUP_s,		"Voulez-vous supprimer le groupe « %s » ?"
IDS_DELETE_PROGRAM_s,		"Voulez-vous supprimer le programme « %s » ?"
IDS_NOT_IMPLEMENTED,		"Non implémenté"
IDS_FILE_READ_ERROR_s,		"Impossible d'ouvrir « %s »."
IDS_FILE_WRITE_ERROR_s,		"Impossible d'enregistrer « %s »."
IDS_GRPFILE_READ_ERROR_s,	"\
Impossible d'ouvrir le groupe « %s ».\n\
Voulez-vous que le Gestionnaire de programmes essaie\n\
de l'ouvrir dans les prochaines sessions ?"
IDS_OUT_OF_MEMORY,		"Mémoire insuffisante."
IDS_WINHELP_ERROR,		"Impossible d'afficher l'aide."
IDS_UNKNOWN_FEATURE_s,		"Caractéristique inconnue dans %s"
IDS_FILE_NOT_OVERWRITTEN_s,	"Le fichier « %s » existe. Non écrasé."
IDS_SAVE_GROUP_AS_s,		"Groupe enregistré sous « %s » pour éviter l'écrasement du fichier original."
IDS_NO_HOT_KEY,			"Aucun"
IDS_ALL_FILES,			"Tous fichiers (*.*)"
IDS_PROGRAMS,			"Programmes"
IDS_LIBRARIES_DLL,		"Bibliothèques (*.dll)"
IDS_SYMBOL_FILES,		"Icônes"
IDS_SYMBOLS_ICO,		"Icônes (*.ico)"
}

STRINGTABLE DISCARDABLE LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
{
IDS_LICENSE_CAPTION,            "LICENCE"
IDS_LICENSE,
"Ce programme 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 Licence, soit (à votre gré) toute version ultérieure.\n\
Ce programme 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\
Vous devriez avoir reçu une copie de la Licence Générale Publique Limitée \
GNU avec ce programme ; si ce n'est pas le cas, écrivez à la : \
Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, \
MA 02110-1301, USA."

IDS_WARRANTY_CAPTION, "AUCUNE GARANTIE"
IDS_WARRANTY,
"Ce programme 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."
}
