/*
 * wininet (Dutch resources)
 *
 * Copyright 2003 Hans Leidekker
 *
 * 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"

LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL

#pragma code_page(65001)

IDD_PROXYDLG DIALOG 36, 24, 250, 154
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Netwerkwachtwoord invoeren"
FONT 8, "MS Shell Dlg"
{
 LTEXT "Voer uw gebruikersnaam en wachtwoord in:", -1, 40, 6, 150, 15
 LTEXT "Proxy", -1, 40, 26, 50, 10
 LTEXT "Realm", -1, 40, 46, 50, 10
 LTEXT "Gebruikersnaam", -1, 40, 66, 50, 10
 LTEXT "Wachtwoord", -1, 40, 86, 50, 10
 LTEXT "" IDC_PROXY, 80, 26, 150, 14, 0
 LTEXT "" IDC_REALM, 80, 46, 150, 14, 0
 EDITTEXT IDC_USERNAME, 80, 66, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP
 EDITTEXT IDC_PASSWORD, 80, 86, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP | ES_PASSWORD
 CHECKBOX "&Wachtwoord opslaan (onveilig)", IDC_SAVEPASSWORD,
           80, 106, 150, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
 PUSHBUTTON "OK", IDOK, 98, 126, 56, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON
 PUSHBUTTON "Annuleren", IDCANCEL, 158, 126, 56, 14, WS_GROUP | WS_TABSTOP
}

IDD_AUTHDLG DIALOG 36, 24, 250, 154
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Authenticatie vereist"
FONT 8, "MS Shell Dlg"
{
 LTEXT "Voer uw gebruikersnaam en wachtwoord in:", -1, 40, 6, 150, 15
 LTEXT "Server", -1, 40, 26, 50, 10
 LTEXT "Realm", -1, 40, 46, 50, 10
 LTEXT "Gebruikersnaam", -1, 40, 66, 50, 10
 LTEXT "Wachtwoord", -1, 40, 86, 50, 10
 LTEXT "" IDC_SERVER, 80, 26, 150, 14, 0
 LTEXT "" IDC_REALM, 80, 46, 150, 14, 0
 EDITTEXT IDC_USERNAME, 80, 66, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP
 EDITTEXT IDC_PASSWORD, 80, 86, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP | ES_PASSWORD
 CHECKBOX "&Wachtwoord opslaan (onveilig)", IDC_SAVEPASSWORD,
           80, 106, 150, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
 PUSHBUTTON "OK", IDOK, 98, 126, 56, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON
 PUSHBUTTON "Annuleren", IDCANCEL, 158, 126, 56, 14, WS_GROUP | WS_TABSTOP
}

IDD_INVCERTDLG DIALOG 3, 24, 250, 86
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Veiligheidswaarschuwing"
FONT 8, "MS Shell Dlg"
{
 LTEXT "Er is een probleem met het certificaat voor deze site.", -1, 40, 6, 200, 20
 LTEXT "", IDC_CERT_ERROR, 40, 26, 200, 20
 LTEXT "Wilt u toch doorgaan?", -1, 40, 46, 200, 20
 PUSHBUTTON "Ja", IDOK, 40, 66, 56, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON
 PUSHBUTTON "Nee", IDCANCEL, 100, 66, 56, 14, WS_GROUP | WS_TABSTOP
}

STRINGTABLE
{
  IDS_LANCONNECTION "LAN Verbinding"
  IDS_CERT_CA_INVALID   "Het certificaat is uitgegeven door een onbekende on onbetrouwbare uitgever."
  IDS_CERT_DATE_INVALID "De datum op het certificaat is ongeldig."
  IDS_CERT_CN_INVALID   "De naam op het certificaat komt niet overeen met de site."
  IDS_CERT_ERRORS       "Er is tenminste één ongespecificeerd veiligheidsprobleem met dit certificaat."
}
