/*
 * 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_1,	"Ceci est un test"
IDS_FNT_PREVIEW_2,	"éèàôë"
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 LOADONCALL MOVEABLE DISCARDABLE 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 LOADONCALL MOVEABLE DISCARDABLE 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 LOADONCALL MOVEABLE DISCARDABLE 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 LOADONCALL MOVEABLE DISCARDABLE 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
}
