/*
 * Internet control panel applet
 * French language support
 *
 * Copyright 2010-2011 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)

/* "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 l'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
    GROUPBOX    " Historique de navigation ", IDC_STATIC, 4, 60, 312, 46
    LTEXT       "Vous pouvez effacer les pages en cache, les cookies et d'autres données.",
                IDC_STATIC, 68, 72, 242, 10
    PUSHBUTTON  "&Effacer les fichiers...", IDC_HISTORY_DELETE, 151, 86, 77, 14
    PUSHBUTTON  "&Paramètres...", IDC_HISTORY_SETTINGS, 233, 86, 77, 14

END

/* "Delete browsing history" dialog */
IDD_DELETE_HISTORY DIALOG  0, 0, 250, 250
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Effacer l'historique de navigation"
BEGIN

    AUTOCHECKBOX   "Fichiers internet temporaires\nCopies en cache de pages web, d'images et de certificats.",
                    IDC_DELETE_TEMP_FILES, 10, 8, 230, 30, BS_TOP | BS_MULTILINE
    AUTOCHECKBOX   "Cookies\nDonnées enregistrées sur votre ordinateur par des sites web, telles que préférences utilisateur et informations de connexion.",
                    IDC_DELETE_COOKIES, 10, 32, 230, 35, BS_TOP | BS_MULTILINE
    AUTOCHECKBOX   "Historique\nListe des sites web accédés.",
                    IDC_DELETE_HISTORY, 10, 73, 230, 30, BS_TOP | BS_MULTILINE
    AUTOCHECKBOX   "Données de formulaires\nNoms d'utilisateur et autres informations entrées dans des formulaires.",
                    IDC_DELETE_FORM_DATA, 10, 98, 230, 30, BS_TOP | BS_MULTILINE
    AUTOCHECKBOX   "Mots de passe\nMots de passe entrés dans des formulaires et sauvegardés.",
                    IDC_DELETE_PASSWORDS, 10, 128, 230, 30, BS_TOP | BS_MULTILINE
    DEFPUSHBUTTON  "Annuler", IDCANCEL, 185, 228, 60, 15, WS_GROUP
    PUSHBUTTON     "Effacer", IDOK, 120, 228, 60, 15, WS_GROUP

END

/* "Security" propsheet */
IDD_SECURITY DIALOG  0, 0, 320, 220
STYLE WS_CAPTION | WS_CHILD | WS_DISABLED
FONT 8, "MS Shell Dlg"
CAPTION "Sécurité"
BEGIN

    CONTROL     "Listview", IDC_SEC_LISTVIEW, "SysListView32",
                LVS_ICON | LVS_ALIGNLEFT | LVS_AUTOARRANGE | LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER | WS_VSCROLL,
                4, 4, 312, 58
    LTEXT       "", IDC_SEC_ZONE_INFO, 4, 68, 312, 20
    GROUPBOX    "", IDC_SEC_GROUP, 4, 88, 312, 126
    CONTROL     "trackbar", IDC_SEC_TRACKBAR, "msctls_trackbar32",
                TBS_VERT | TBS_AUTOTICKS | TBS_BOTH | TBS_REVERSED, 8, 98, 32, 100
    LTEXT       "", IDC_SEC_LEVEL, 48, 102, 180, 12
    LTEXT       "", IDC_SEC_LEVEL_INFO, 48, 114, 260, 80
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
