/*
 *  Notepad (French resources)
 *
 *  Copyright 1997,98 Marcel Baur <mbaur@g26.ethz.ch>
 *  Translation by Laurent Buffler <laurent@bluewin.ch>
 *  Copyright 2002 Sylvain Petreolle <spetreolle@yahoo.fr>
 *  Copytight 2009 Jonathan Ernst <jonathan@ernstfamily.ch>
 *
 * 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 "notepad_res.h"

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

LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL

MAIN_MENU MENU
{
 POPUP "&Fichier" {
  MENUITEM "&Nouveau\tCtrl+N",       CMD_NEW
  MENUITEM "&Ouvrir...\tCtrl+O",   CMD_OPEN
  MENUITEM "&Enregistrer\tCtrl+S", CMD_SAVE
  MENUITEM "Enregistrer &sous...", CMD_SAVE_AS
  MENUITEM SEPARATOR
  MENUITEM "Im&primer...\tCtrl+P",         CMD_PRINT
  MENUITEM "&Mise en page...",  CMD_PAGE_SETUP
  MENUITEM "&Configuration de l'imprimante...", CMD_PRINTER_SETUP
  MENUITEM SEPARATOR
  MENUITEM "&Quitter",          CMD_EXIT
 }
POPUP "É&dition" {
  MENUITEM "&Annuler\tCtrl+Z",  CMD_UNDO
  MENUITEM SEPARATOR
  MENUITEM "Co&uper\tCtrl+X",   CMD_CUT
  MENUITEM "&Copier\tCtrl+C",   CMD_COPY
  MENUITEM "C&oller\tCtrl+V",   CMD_PASTE
  MENUITEM "&Effacer\tDel",     CMD_DELETE
  MENUITEM SEPARATOR
  MENUITEM "Tout &sélectionner\tCtrl+A", CMD_SELECT_ALL
  MENUITEM "&Heure/Date\tF5",   CMD_TIME_DATE
  MENUITEM SEPARATOR
  MENUITEM "&Retour à la ligne automatique", CMD_WRAP
  MENUITEM "&Police...",        CMD_FONT
 }
POPUP "&Rechercher" {
  MENUITEM "&Rechercher...\tCtrl+F", CMD_SEARCH
  MENUITEM "&Suivant\tF3",      CMD_SEARCH_NEXT
  MENUITEM "&Remplacer...\tCtrl+H", CMD_REPLACE
 }
POPUP "Aid&e" {
  MENUITEM "&Sommaire",         CMD_HELP_CONTENTS
  MENUITEM "&Rechercher...",    CMD_HELP_SEARCH
  MENUITEM "&Utiliser l'aide",  CMD_HELP_ON_HELP
  MENUITEM SEPARATOR
  MENUITEM "À &propos du Bloc-notes", CMD_HELP_ABOUT_NOTEPAD
 }
}

/* Dialog `Page setup' */

DIALOG_PAGESETUP DIALOG 0, 0, 225, 95
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Mise en page"
{
LTEXT    "&En-tête :",  0x140,   10, 07, 50, 15
EDITTEXT IDC_PAGESETUP_HEADERVALUE,   60, 05,110, 12, WS_BORDER | WS_TABSTOP
LTEXT    "&Pied de page :",  0x142,   10, 24, 50, 15
EDITTEXT IDC_PAGESETUP_FOOTERVALUE,   60, 22,110, 12, WS_BORDER | WS_TABSTOP

GROUPBOX "&Marges (millimètres):",  0x144,  10, 43,160, 45
LTEXT    "&Gauche :",        0x145,   20, 55, 30, 10, WS_CHILD
EDITTEXT IDC_PAGESETUP_LEFTVALUE,     50, 55, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    "&Haut :",         0x148,    20, 73, 30, 10, WS_CHILD
EDITTEXT IDC_PAGESETUP_TOPVALUE,      50, 73, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    "&Droite :",       0x14B, 100, 55, 30, 10, WS_CHILD
EDITTEXT IDC_PAGESETUP_RIGHTVALUE,   130, 55, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    "&Bas :",      0x14E,100, 73, 30, 10, WS_CHILD
EDITTEXT IDC_PAGESETUP_BOTTOMVALUE,  130, 73, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP

DEFPUSHBUTTON "OK",         IDOK,                   180,  3, 40, 15, WS_TABSTOP
PUSHBUTTON    "Annuler",     IDCANCEL,               180, 21, 40, 15, WS_TABSTOP
PUSHBUTTON    "&Aide",       IDHELP,                180, 39, 40, 15, WS_TABSTOP
}

IDD_OFN_TEMPLATE  DIALOG 50,50,300,15
STYLE DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_BORDER
FONT 8, "MS Shell Dlg"
BEGIN
  LTEXT "Codage", -1, 5,0, 50,12
  COMBOBOX IDC_OFN_ENCCOMBO, 59,0, 156,48, WS_CHILD | WS_VSCROLL | CBS_DROPDOWNLIST
END

STRINGTABLE
{
STRING_PAGESETUP_HEADERVALUE,   "&f"
STRING_PAGESETUP_FOOTERVALUE,   "Page &p"

STRING_NOTEPAD,                                 "Bloc-notes"
STRING_ERROR,                                   "ERREUR"
STRING_WARNING,                                 "ATTENTION"
STRING_INFO,                                    "Information"

STRING_UNTITLED,                                "(sans titre)"

STRING_ALL_FILES,                               "Tous les fichiers (*.*)"
STRING_TEXT_FILES_TXT,                          "Fichiers texte (*.txt)"

STRING_TOOLARGE,                                "Le fichier « %s » est trop grand pour le bloc-notes.\n\
Veuillez utiliser un autre éditeur."
STRING_NOTEXT,                                  "Vous n'avez pas entré de texte. \
Veuillez taper quelque chose et recommencer"
STRING_DOESNOTEXIST,                            "Le fichier « %s » n'existe pas.\n\n\
Voulez-vous créer un nouveau fichier ?"
STRING_NOTSAVED,                                "Le fichier « %s » a été modifié\n\n\
Voulez-vous enregistrer vos modifications ?"
STRING_NOTFOUND,                                "« %s » non trouvé."
STRING_OUT_OF_MEMORY,                           "Pas assez de mémoire pour terminer cette \
tâche.\nFermez une ou plusieurs applications pour libérer\n\
de la mémoire."

STRING_UNICODE_LE,     "Unicode (UTF-16)"
STRING_UNICODE_BE,     "Unicode (UTF-16 big-endian)"

STRING_LOSS_OF_UNICODE_CHARACTERS,         "%s\n\
Ce fichier contient des caractères Unicode qui seront perdus si\n\
vous le sauvez dans le codage %s.\n\
Pour conserver ces caractères, cliquez sur Annuler et sélectionnez\n\
une des alternatives Unicode dans la liste déroulante Codage.\n\
Continuer ?"
}
