/*
 * Dutch language resource file for Credentials UI
 *
 * Copyright 2008 Frans Kool
 *
 * 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
 */

LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL

IDD_CREDDIALOG DIALOG DISCARDABLE  0, 0, 213, 149
STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "IDS_TITLEFORMAT"
FONT 8, "MS Shell Dlg"
BEGIN
    CONTROL         IDB_BANNER,IDC_STATIC,"Static",SS_BITMAP | SS_CENTERIMAGE,0,
                    0,213,37
    LTEXT           "IDS_MESSAGEFORMAT",IDC_MESSAGE,8,48,199,8,NOT WS_GROUP
    LTEXT           "&Gebruikers naam:",IDC_STATIC,8,62,72,12,SS_CENTERIMAGE
    CONTROL         "",IDC_USERNAME,"ComboBoxEx32",CBS_DROPDOWN |
                    CBS_NOINTEGRALHEIGHT | WS_TABSTOP,80,62,126,87
    LTEXT           "&Wachtwoord:",IDC_STATIC,8,80,72,12,SS_CENTERIMAGE
    EDITTEXT        IDC_PASSWORD,80,80,126,12,ES_PASSWORD | ES_AUTOHSCROLL
    CONTROL         "&Onthoudt mijn wachtwoord",IDC_SAVE,"Button",
                    BS_AUTOCHECKBOX | WS_TABSTOP,80,98,126,12
    DEFPUSHBUTTON   "OK",IDOK,97,128,50,14
    PUSHBUTTON      "Annuleren",IDCANCEL,156,128,50,14
END

STRINGTABLE DISCARDABLE
{
    IDS_TITLEFORMAT     "Verbind met %s"
    IDS_MESSAGEFORMAT   "Verbinden met %s"
    IDS_INCORRECTPASSWORDTITLE  "Aanloggen mislukt"
    IDS_INCORRECTPASSWORD       "Controleer dat uw gebruikersnaame\nen wachtwoord correct zijn."
    IDS_CAPSLOCKONTITLE "Caps Lock staat Aan"
    IDS_CAPSLOCKON      "Met Caps Lock aan kan uw wachtwoord verkeerd worden ingevoerd.\n\nDruk op de Caps Lock toets op uw toetsenbord om Caps Lock uit\nte zetten voor invoer van uw wachtwoord."
}
