/*
 * shdocvw French resources
 *
 * Copyright 2010 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 "resource.h"

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

LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL

IDD_BROWSE_OPEN DIALOG 10, 10, 200, 70
STYLE DS_MODALFRAME | WS_CAPTION
CAPTION "Open URL"
FONT 8, "MS Shell Dlg"
{
    LTEXT "Spécifiez l'URL que vous désirez ouvrir dans Internet Explorer :",-1,30, 6, 150, 17
    LTEXT "Ouvrir :", -1, 2, 32, 27, 15
    EDITTEXT IDC_BROWSE_OPEN_URL, 30, 30, 155, 13
    DEFPUSHBUTTON "&OK", IDOK, 54, 50, 50, 15
    PUSHBUTTON "&Annuler", IDCANCEL, 114, 50, 50, 15
}

IDR_BROWSE_MAIN_MENU MENU
{
    POPUP "&Fichier"
    {
        POPUP "&Nouvelle"
        {
            MENUITEM "&Fenêtre",                 ID_BROWSE_NEW_WINDOW
        }
        MENUITEM "&Ouvrir...",                    ID_BROWSE_OPEN
        MENUITEM "&Enregistrer",                       ID_BROWSE_SAVE
        MENUITEM "Enregistrer &sous...",                 ID_BROWSE_SAVE_AS
        MENUITEM SEPARATOR
        MENUITEM "&Format d'impression...",            ID_BROWSE_PRINT_FORMAT
        MENUITEM "&Imprimer...",                   ID_BROWSE_PRINT
        MENUITEM "&Aperçu avant impression...",           ID_BROWSE_PRINT_PREVIEW
        MENUITEM SEPARATOR
        MENUITEM "&Propriétés...",              ID_BROWSE_PROPERTIES
        MENUITEM "&Quitter",                    ID_BROWSE_QUIT
    }
    POPUP "&Afficher"
    {
        POPUP "&Barres d'outils"
        {
            MENUITEM "Barre &standard",           ID_BROWSE_BAR_STD
            MENUITEM "Barre d'&adresse",            ID_BROWSE_BAR_ADDR
        }
    }
    POPUP "&Favoris"
    {
        MENUITEM "&Ajouter aux favoris...",        ID_BROWSE_ADDFAV
        MENUITEM SEPARATOR
    }
    POPUP "A&ide"
    {
        MENUITEM "À &propos d'Internet Explorer...", ID_BROWSE_ABOUT
    }
}

STRINGTABLE
{
    IDS_TB_BACK             "Précédent"
    IDS_TB_FORWARD          "Suivant"
    IDS_TB_STOP             "Arrêter"
    IDS_TB_REFRESH          "Recharger"
    IDS_TB_HOME             "Accueil"
    IDS_TB_PRINT            "Imprimer"
}

STRINGTABLE
{
    IDS_ADDRESS             "Adresse"
}
