/*
 * Copyright 2001 Eric Pouech
 * Copyright 2006 Jonathan Ernst
 * Copyright 2009 Frédéric Delanoy
 *
 * 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 "wineconsole_res.h"

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

LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL

STRINGTABLE
BEGIN
IDS_EDIT,		"É&dition"
IDS_DEFAULT,		"Par &défaut"
IDS_PROPERTIES,		"&Propriétés"
IDS_MARK,		"&Marquer"
IDS_COPY,		"&Copier"
IDS_PASTE,		"C&oller"
IDS_SELECTALL,		"&Sélectionner tout"
IDS_SCROLL,		"&Défiler"
IDS_SEARCH,		"C&hercher"
IDS_FNT_DISPLAY,	"Chaque caractère a %ld pixels de largeur et %ld pixels de hauteur"
IDS_FNT_PREVIEW,	"Ceci est un test"
IDS_DLG_TIT_DEFAULT,    "Configuration par défaut"
IDS_DLG_TIT_CURRENT,    "Configuration courante"
IDS_DLG_TIT_ERROR,	"Erreur de configuration"
IDS_DLG_ERR_SBWINSIZE,	"La taille du tampon écran doit être plus grande ou égale à celle du tampon de la fenêtre"

IDS_CMD_INVALID_EVENT_ID   "wineconsole : impossible de déchiffrer l'identifiant d'événement\n"
IDS_CMD_INVALID_BACKEND    "wineconsole : moteur invalide\n"
IDS_CMD_INVALID_OPTION     "wineconsole : option de ligne de commande non reconnue\n"
IDS_CMD_ABOUT              "Démarre un programme dans une console Wine\n"
IDS_CMD_LAUNCH_FAILED      "wineconsole : échec lors du démarrage du programme %s.\n"\
                           "La commande est invalide.\n"

IDS_USAGE_HEADER           "\nUsage :\n  wineconsole [options] <commande>\n\nOptions :\n"
IDS_USAGE_BACKEND          "  --backend={user|curses}  Utilisez « user »   pour utiliser une nouvelle fenêtre\n"\
                           "                                    « curses » pour essayer de convertir le terminal courant en console Wine\n"
IDS_USAGE_COMMAND          "  <commande>               Le programme Wine à exécuter dans la console\n"
IDS_USAGE_FOOTER           "\nExemple : « wineconsole cmd » démarre l'interpréteur de commandes de Wine dans une console Wine\n\n"

END

IDD_OPTION DIALOG 36, 24, 214, 105
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION " Options "
FONT 8, "MS Shell Dlg"
{
	GROUPBOX "Taille du curseur", -1, 10, 11, 63, 49, BS_GROUPBOX
	AUTORADIOBUTTON "&Petit", IDC_OPT_CURSOR_SMALL, 14, 25, 44, 10, WS_TABSTOP
	AUTORADIOBUTTON "&Moyen", IDC_OPT_CURSOR_MEDIUM, 14, 35, 44, 10, WS_TABSTOP
	AUTORADIOBUTTON "&Grand", IDC_OPT_CURSOR_LARGE, 14, 45, 44, 10, WS_TABSTOP

	GROUPBOX "Contrôle", -1, 75, 11, 129, 49, BS_GROUPBOX
	LTEXT "Menu contextuel", -1, 83, 23, 53, 10
	AUTOCHECKBOX "&Control", IDC_OPT_CONF_CTRL, 142, 23, 60, 10, WS_TABSTOP
	AUTOCHECKBOX "S&hift", IDC_OPT_CONF_SHIFT, 142, 33, 60, 10, WS_TABSTOP
	LTEXT "Édition rapide", -1, 83, 48, 53, 10
	AUTOCHECKBOX "&activer", IDC_OPT_QUICK_EDIT, 142, 48, 60, 10, WS_TABSTOP

	GROUPBOX "Historique des commandes", -1, 10, 62, 194, 35, BS_GROUPBOX
	LTEXT "&Nombre de commandes mémorisées :", -1, 14, 72, 78, 18
	EDITTEXT IDC_OPT_HIST_SIZE, 94, 74, 31, 12, WS_TABSTOP|WS_BORDER|ES_NUMBER
	CONTROL "", IDC_OPT_HIST_SIZE_UD, "msctls_updown32", UDS_SETBUDDYINT|UDS_ALIGNRIGHT|UDS_AUTOBUDDY|UDS_ARROWKEYS|UDS_NOTHOUSANDS, 0, 0, 0, 0
	AUTOCHECKBOX "&Supprimer les doublons", IDC_OPT_HIST_NODOUBLE, 142, 72, 60, 18, WS_TABSTOP|BS_MULTILINE
}

IDD_FONT DIALOG 36, 24, 205, 106
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION " Police "
FONT 8, "MS Shell Dlg"
{
	LTEXT "&Police", -1, 5, 5, 24, 8
	LISTBOX IDC_FNT_LIST_FONT, 5, 18, 90, 42, LBS_SORT|WS_VSCROLL
	LTEXT "&Couleur", -1, 100, 5, 50, 8
	CONTROL "", IDC_FNT_COLOR_FG, "WineConColorPreview", 0L, 100, 18, 48, 16
	CONTROL "", IDC_FNT_COLOR_BK, "WineConColorPreview", 0L, 100, 40, 48, 16
	LTEXT "&Taille", -1, 158, 5, 40, 8
	LISTBOX IDC_FNT_LIST_SIZE, 158, 18, 40, 43, WS_VSCROLL
	CONTROL "", IDC_FNT_PREVIEW, "WineConFontPreview", 0L, 5, 60, 109, 40
	LTEXT "", IDC_FNT_FONT_INFO, 120, 69, 78, 28
}

IDD_CONFIG DIALOG 36, 24, 205, 107
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION " Configuration "
FONT 8, "MS Shell Dlg"
{
	GROUPBOX "Taille mémoire tampon écran", -1, 10, 11, 100, 42, BS_GROUPBOX
	LTEXT "&Largeur :", -1, 14, 25, 54, 9
	EDITTEXT IDC_CNF_SB_WIDTH, 68, 23, 36, 12, WS_TABSTOP|WS_BORDER|ES_NUMBER
	CONTROL "", IDC_CNF_SB_WIDTH_UD, "msctls_updown32", UDS_SETBUDDYINT|UDS_ALIGNRIGHT|UDS_AUTOBUDDY|UDS_ARROWKEYS|UDS_NOTHOUSANDS, 0, 0, 0, 0
	LTEXT "Ha&uteur :", -1, 14, 39, 54, 9
	EDITTEXT IDC_CNF_SB_HEIGHT, 68, 37, 36, 12, WS_TABSTOP|WS_BORDER|ES_NUMBER
	CONTROL "", IDC_CNF_SB_HEIGHT_UD, "msctls_updown32", UDS_SETBUDDYINT|UDS_ALIGNRIGHT|UDS_AUTOBUDDY|UDS_ARROWKEYS|UDS_NOTHOUSANDS, 0, 0, 0, 0

	GROUPBOX "Taille de la fenêtre", -1, 10, 55, 100, 42
	LTEXT "La&rgeur :", -1, 14, 69, 54, 9
	EDITTEXT IDC_CNF_WIN_WIDTH, 68, 67, 36, 12, WS_TABSTOP|WS_BORDER|ES_NUMBER
	CONTROL "", IDC_CNF_WIN_WIDTH_UD, "msctls_updown32", UDS_SETBUDDYINT|UDS_ALIGNRIGHT|UDS_AUTOBUDDY|UDS_ARROWKEYS|UDS_NOTHOUSANDS, 0, 0, 0, 0
	LTEXT "Hau&teur :", -1, 14, 83, 54, 9
	EDITTEXT IDC_CNF_WIN_HEIGHT, 68, 81, 36, 12, WS_TABSTOP|WS_BORDER|ES_NUMBER
	CONTROL "", IDC_CNF_WIN_HEIGHT_UD, "msctls_updown32", UDS_SETBUDDYINT|UDS_ALIGNRIGHT|UDS_AUTOBUDDY|UDS_ARROWKEYS|UDS_NOTHOUSANDS, 0, 0, 0, 0

	GROUPBOX "Fin du programme", -1, 115, 11, 80, 42, BS_GROUPBOX
	AUTOCHECKBOX "&Fermer la console", IDC_CNF_CLOSE_EXIT, 119, 25, 70, 20, WS_TABSTOP

	GROUPBOX "Édition", -1, 115, 55, 80, 42
	COMBOBOX IDC_CNF_EDITION_MODE, 119, 69, 73, 13, CBS_DROPDOWNLIST|WS_VSCROLL|WS_TABSTOP
}

IDD_SAVE_SETTINGS DIALOG 20, 20, 206, 60
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION
CAPTION "Paramètres de la console"
FONT 8, "MS Shell Dlg"
{
	GROUPBOX "", -1, 10, 10, 185, 31, BS_GROUPBOX
	AUTORADIOBUTTON "Sauver les paramètres pour les prochaines sessions", IDC_SAV_SAVE, 14, 15, 180, 10, WS_TABSTOP
	AUTORADIOBUTTON "Appliquer uniquement à la session courante", IDC_SAV_SESSION, 14, 27, 180, 10, WS_TABSTOP

	PUSHBUTTON "OK", IDOK, 55, 45, 35, 12
	PUSHBUTTON "Annuler", IDCANCEL, 120, 45, 35, 12
}
