/*
 * English Language Support
 *
 * Copyright 2009 André Hentschel
 *
 * 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
 */

#pragma code_page(65001)

LANGUAGE LANG_GERMAN, 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 "Programm Fehler"
FONT 8, "Tahoma"
BEGIN
    LTEXT           "",IDC_STATIC_BG,0,0,273,52,WS_BORDER,0
    LTEXT           "Im Programm %s traten schwerwiegende Fehler auf \
                    und es muss beendet werden. Wir entschuldigen uns für die Unannehmlichkeit.",
                    IDC_STATIC_TXT1,27,10,224,30
    LTEXT           "Die Ursache kann ein Problem im Programm oder ein Fehler in Wine sein. \
                    Sie können unter http://appdb.winehq.org Tipps zum ausführen \
                    der Anwendung einholen.\n\n\
                    Tritt dieses Problem unter Windows nicht auf und wurde es noch nicht \
                    gemeldet, können Sie unter http://bugs.winehq.org einen Eintrag hinterlassen.",IDC_STATIC_TXT2,27,60,224,100
    DEFPUSHBUTTON   "Schließen", IDOK, 205, 151, 60, 16, WS_TABSTOP
END

STRINGTABLE
BEGIN
    IDS_AUTO_CAPTION     "Wine Programm absturz"
    IDS_INVALID_PARAMS   "Interne Fehler - ungültige Parameter empfangen"
    IDS_UNIDENTIFIED     "(unbekannt)"
END

#pragma code_page(default)
