/*
 * Internet control panel applet
 * French language support
 *
 * 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 "inetcpl.h"

LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL

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

STRINGTABLE DISCARDABLE
BEGIN
    IDS_CPL_NAME        "Paramètres Internet"
    IDS_CPL_INFO        "Configurer le navigateur internet de Wine et d'autres paramètres associés"
END

/* "General" propsheet */
IDD_GENERAL DIALOG  0, 0, 320, 220
STYLE WS_CAPTION | WS_CHILD | WS_DISABLED
FONT 8, "MS Shell Dlg"
CAPTION "Général"
BEGIN

    GROUPBOX    " Page d'accueil ", IDC_STATIC, 4, 4, 312, 52
    LTEXT       "Vous pouvez spécifier une adresse à utiliser comme page d'accueil :",
                IDC_STATIC, 68, 10, 242, 10
    EDITTEXT    IDC_HOME_EDIT, 68, 22, 242, 12, WS_VISIBLE | ES_AUTOHSCROLL
    PUSHBUTTON  "Page &courante", IDC_HOME_CURRENT, 68, 36, 77, 14
    PUSHBUTTON  "Page par &défaut", IDC_HOME_DEFAULT, 151, 36, 77, 14
    PUSHBUTTON  "Page &blanche", IDC_HOME_BLANK, 233, 36, 77, 14

END

/* "Content" propsheet */
IDD_CONTENT DIALOG  0, 0, 320, 220
STYLE WS_CAPTION | WS_CHILD | WS_DISABLED
FONT 8, "MS Shell Dlg"
CAPTION "Contenu"
BEGIN

    GROUPBOX    " Certificats ", IDC_STATIC, 4, 4, 312, 50
    LTEXT       "Les certificats sont utilisés pour votre identification personnelle, celle d'autorités de certification ou d'éditeurs.",
                IDC_STATIC, 58, 14, 252, 18
    PUSHBUTTON  "Certificats...", IDC_CERT, 146, 34, 80, 14
    PUSHBUTTON	"Éditeurs...", IDC_CERT_PUBLISHER, 230, 34, 80, 14

END
