/*
 * Dutch Language Support
 *
 * Copyright 2009 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

IDM_DEBUG_POPUP MENU
BEGIN
    POPUP ""
    BEGIN
        MENUITEM "&Debug", ID_DEBUG
    END
END

IDD_CRASH_DLG DIALOGEX 100, 100, 273, 175
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Programma Fout"
FONT 8, "Tahoma"
BEGIN
    LTEXT           "",IDC_STATIC_BG,0,0,273,52,WS_BORDER,0
    LTEXT           "Het programma %s is een serieus probleem tegengekomen en moet \
                    afgesloten worden. Excuses voor het ongemak.",
                    IDC_STATIC_TXT1,27,10,224,30
    LTEXT           "Dit kan veroorzaakt worden door een probleem in het programma of een fout in Wine. \
                    U kunt zoeken op http://appdb.winehq.org naar tips over het draaien \
                    van dit programma.\n\n\
                    Als dit probleem niet optreedt onder Windows en nog niet is gerapporteerd, \
                    dan kunt u het rapporteren op http://bugs.winehq.org.",IDC_STATIC_TXT2,27,60,224,100
    DEFPUSHBUTTON   "Sluiten", IDOK, 205, 151, 60, 16, WS_TABSTOP
END

STRINGTABLE
BEGIN
    IDS_AUTO_CAPTION     "Wine programma crash"
    IDS_INVALID_PARAMS   "Interne fouten - foutieve parameters ontvangen"
    IDS_UNIDENTIFIED     "(onbekend)"
END
