/*
 * Copyright 2006 by 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL

MAINMENU MENU DISCARDABLE 
BEGIN
    POPUP "&Fichier"
    BEGIN
        MENUITEM "&Nouveau",        ID_FILE_NEW
        MENUITEM "&Ouvrir",         ID_FILE_OPEN
        MENUITEM "&Sauver",         ID_FILE_SAVE
        MENUITEM SEPARATOR
        MENUITEM "&Quitter",        ID_FILE_EXIT
    END
    POPUP "&Edition"
    BEGIN
        MENUITEM "&Annuler\tCtrl+Z",               ID_EDIT_UNDO
        MENUITEM "&RÃ©pÃ©ter\tCtrl+Y",               ID_EDIT_REDO
        MENUITEM "&SÃ©lectionner tout\tCtrl+A",         ID_EDIT_SELECTALL
        MENUITEM SEPARATOR
        MENUITEM "&Couper\tCtrl+X",                ID_EDIT_CUT
        MENUITEM "Co&pier\tCtrl+C",               ID_EDIT_COPY
        MENUITEM SEPARATOR
        MENUITEM "Lecture-&seule",                  ID_EDIT_READONLY
        MENUITEM "&ModifiÃ©",                   ID_EDIT_MODIFIED
        MENUITEM SEPARATOR
        POPUP "&AvancÃ©s"
        BEGIN
            MENUITEM "&Information sÃ©lection",      ID_EDIT_SELECTIONINFO
            MENUITEM "&Format caractÃšres",          ID_EDIT_CHARFORMAT
            MENUITEM "&DÃ©f. format car.",           ID_EDIT_DEFCHARFORMAT
            MENUITEM "Format paragrap&he",          ID_EDIT_PARAFORMAT
            MENUITEM "&Recevoir texte",             ID_EDIT_GETTEXT
        END
    END
    POPUP "F&ormat"
    BEGIN
        POPUP "&Fond"
        BEGIN
            MENUITEM "&SystÃšme\tCtrl+1",         ID_BACK_1
            MENUITEM "&PostThat yellowish\tCtrl+2",           ID_BACK_2
        END
        POPUP "&Alignement"
        BEGIN
            MENUITEM "AlignÃ© Ã  &gauche\tCtrl+L",         ID_ALIGN_LEFT
            MENUITEM "&CentrÃ©\tCtrl+E",       ID_ALIGN_CENTER
            MENUITEM "AlignÃ© Ã  &droite\tCtrl+R",        ID_ALIGN_RIGHT
        END
    END
END
