/*
 * German 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
 */

#include "resource.h"

#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
