/*
 * German resources for the Internet control panel applet
 *
 * Copyright 2010 Detlef Riekenberg
 *
 * 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"

#pragma code_page(65001)

LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL

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

    GROUPBOX    " Startseite ", IDC_STATIC, 4, 4, 312, 52
    LTEXT       "Sie können eine Addresse wählen, die als Startseite verwendet wird.",
                IDC_STATIC, 58, 10, 252, 10
    EDITTEXT    IDC_HOME_EDIT, 58, 22, 252, 12, WS_VISIBLE | ES_AUTOHSCROLL
    PUSHBUTTON  "A&ktuelle Seite", IDC_HOME_CURRENT, 58, 36, 80, 14
    PUSHBUTTON  "&Standardseite", IDC_HOME_DEFAULT, 144, 36, 80, 14
    PUSHBUTTON  "&Leere Seite", IDC_HOME_BLANK, 230, 36, 80, 14
    GROUPBOX    " Browserverlauf ", IDC_STATIC, 4, 60, 312, 46
    LTEXT       "Sie können temporäre Dateien, Cookies und andere Daten löschen.",
                IDC_STATIC, 58, 72, 252, 10
    PUSHBUTTON  "&Daten löschen...", IDC_HISTORY_DELETE, 144, 86, 80, 14
    PUSHBUTTON  "&Einstellungen...", IDC_HISTORY_SETTINGS, 230, 86, 80, 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 "Gespeicherte Browserdaten löchen"
BEGIN

    AUTOCHECKBOX   "&Temporäre Inernetdateien\nZwischengespeicherte Kopien von Webseiten, Bildern und Zertifikaten.",
                    IDC_DELETE_TEMP_FILES, 10, 8, 230, 30, BS_TOP | BS_MULTILINE
    AUTOCHECKBOX   "&Cookies\nVon Webseiten auf ihrem Computer gespeicherte Dateien, die Benutzereinstellungen oder Anmeldeinformationen enthalten.",
                    IDC_DELETE_COOKIES, 10, 38, 230, 30, BS_TOP | BS_MULTILINE
    AUTOCHECKBOX   "&Verlauf\nListe von Webseiten, die Sie aufgerufen haben.",
                    IDC_DELETE_HISTORY, 10, 68, 230, 30, BS_TOP | BS_MULTILINE
    AUTOCHECKBOX   "&Formulardaten\nBenutzernamen und andere Informationen, die Sie in Formulare eingegeben haben.",
                    IDC_DELETE_FORM_DATA, 10, 98, 230, 30, BS_TOP | BS_MULTILINE
    AUTOCHECKBOX   "&Kennwörter\nGespeicherte Kennwörter, die Sie in Formulare eingegeben haben.",
                    IDC_DELETE_PASSWORDS, 10, 128, 230, 30, BS_TOP | BS_MULTILINE
    DEFPUSHBUTTON  "&Abbrechen", IDCANCEL, 185, 230, 60, 15, WS_GROUP
    PUSHBUTTON     "&Löschen", IDOK, 120, 230, 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 "Sicherheit"
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 "Inhalte"
BEGIN

    GROUPBOX    " Zertifikate ", IDC_STATIC, 4, 4, 312, 50
    LTEXT       "Zertifikate werden benutzt, um sich persönlich, Zertifizierungsstellen und Herausgeber von Zertifikaten zu identifizieren.",
                IDC_STATIC, 58, 14, 252, 18
    PUSHBUTTON  "Zertifikate...", IDC_CERT, 146, 34, 80, 14
    PUSHBUTTON  "Herausgeber...", IDC_CERT_PUBLISHER, 230, 34, 80, 14

END
