/*
 * Copyright 2002 Andreas Mohr
 *
 * 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 "wineconsole_res.h"

#pragma code_page(65001)

LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL

STRINGTABLE
BEGIN
IDS_EDIT,		"Edi&tieren"
IDS_DEFAULT,		"Stan&dard"
IDS_PROPERTIES,		"&Eigenschaften"
IDS_MARK,		"&Markieren"
IDS_COPY,		"&Kopieren"
IDS_PASTE,		"&Einfügen"
IDS_SELECTALL,		"&Alles auswählen"
IDS_SCROLL,		"Sc&rollen"
IDS_SEARCH,		"&Suchen"
IDS_FNT_DISPLAY,	"Jeder Buchstabe ist %ld Pixel breit und %ld Pixel hoch"
IDS_FNT_PREVIEW,	"Dies ist ein Test"
IDS_DLG_TIT_DEFAULT,    "Setup - Standardeinstellungen"
IDS_DLG_TIT_CURRENT,    "Setup - aktuelle Einstellungen"
IDS_DLG_TIT_ERROR,      "Konfigurationsfehler"
IDS_DLG_ERR_SBWINSIZE,  "Die Bildschirmgröße muß größer oder gleich der des Fensters sein"

IDS_CMD_INVALID_EVENT_ID   "wineconsole: Kann Event-ID nicht parsen\n"
IDS_CMD_INVALID_BACKEND    "wineconsole: Ungültiges backend\n"
IDS_CMD_INVALID_OPTION     "wineconsole: Nicht erkannte Befehlszeilenoption\n"
IDS_CMD_ABOUT              "Startet ein Programm in einer Wine-Konsole.\n"
IDS_CMD_LAUNCH_FAILED      "wineconsole: Starten des Programms %s fehlgeschlagen.\n"\
                           "Der Befehl ist ungültig.\n"

IDS_USAGE_HEADER           "\nAufruf:\n  wineconsole [Optionen] <Befehl>\n\nOptionen:\n"
IDS_USAGE_BACKEND          "  --backend={user|curses}  Auswahl von ‚user‘ erstellt ein neues Fenster,\n"\
                           "                            ‚curses‘ versucht das aktuelle Terminal als Wine-\n"\
                           "                            Konsole einzurichten\n"
IDS_USAGE_COMMAND          "  <Befehl>                  Das in der Konsole zu startende Wine-Programm\n"
IDS_USAGE_FOOTER           "\nBespiel:\n  wineconsole cmd\nStartet die Wine-Befehlszeile in einer Wine-Konsole\n\n"
END

IDD_OPTION DIALOG 36, 24, 140, 105
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION " Optionen "
FONT 8, "MS Shell Dlg"
{
	GROUPBOX "Cursorgröße", -1, 10, 11, 60, 44, BS_GROUPBOX
	AUTORADIOBUTTON "&Klein", IDC_OPT_CURSOR_SMALL, 14, 23, 44, 10, WS_TABSTOP
	AUTORADIOBUTTON "&Mittel", IDC_OPT_CURSOR_MEDIUM, 14, 33, 44, 10, WS_TABSTOP
	AUTORADIOBUTTON "&Groß", IDC_OPT_CURSOR_LARGE, 14, 43, 44, 10, WS_TABSTOP

	GROUPBOX "Steuerung", -1, 75, 11, 125, 44, BS_GROUPBOX
	LTEXT "Popup-Menü", -1, 79, 23, 50, 10
	AUTOCHECKBOX "&Strg", IDC_OPT_CONF_CTRL, 129, 23, 60, 10, WS_TABSTOP
	AUTOCHECKBOX "&Umschalt", IDC_OPT_CONF_SHIFT, 129, 33, 60, 10, WS_TABSTOP
	LTEXT "QuickEdit", -1, 79, 43, 50, 10
	AUTOCHECKBOX "&aktiv", IDC_OPT_QUICK_EDIT, 129, 43, 60, 10, WS_TABSTOP

	GROUPBOX "Befehlsspeicher", -1, 10, 57, 190, 35, BS_GROUPBOX
	LTEXT "&Anzahl der Puffer:", -1, 14, 67, 78, 18
	EDITTEXT IDC_OPT_HIST_SIZE, 92, 69, 31, 12, WS_TABSTOP|WS_BORDER|ES_NUMBER
	CONTROL "", IDC_OPT_HIST_SIZE_UD, "msctls_updown32", UDS_SETBUDDYINT|UDS_ALIGNRIGHT|UDS_AUTOBUDDY|UDS_ARROWKEYS|UDS_NOTHOUSANDS, 0, 0, 0, 0
	AUTOCHECKBOX "Alte &Duplikate löschen", IDC_OPT_HIST_NODOUBLE, 130, 67, 65, 18, WS_TABSTOP|BS_MULTILINE
}

IDD_FONT DIALOG 36, 24, 140, 105
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION " Schriftart "
FONT 8, "MS Shell Dlg"
{
	LTEXT "Schrift&art", -1, 5, 5, 32, 8
	LISTBOX IDC_FNT_LIST_FONT, 5, 18, 90, 42, LBS_SORT|WS_VSCROLL
	LTEXT "F&arbe", -1, 100, 5, 50, 8
	CONTROL "", IDC_FNT_COLOR_FG, "WineConColorPreview", 0L, 100, 18, 48, 16
	CONTROL "", IDC_FNT_COLOR_BK, "WineConColorPreview", 0L, 100, 40, 48, 16
	LTEXT "&Grad", -1, 158, 5, 40, 8
	LISTBOX IDC_FNT_LIST_SIZE, 158, 18, 40, 60, WS_VSCROLL
	CONTROL "", IDC_FNT_PREVIEW, "WineConFontPreview", 0L, 5, 60, 109, 40
	LTEXT "", IDC_FNT_FONT_INFO, 128, 70, 80, 24
}

IDD_CONFIG DIALOG 36, 24, 140, 105
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION " Konfiguration "
FONT 8, "MS Shell Dlg"
{
	GROUPBOX "Fensterpuffergröße", -1, 10, 11, 100, 42, BS_GROUPBOX
	LTEXT "&Breite :", -1, 14, 25, 54, 9
	EDITTEXT IDC_CNF_SB_WIDTH, 68, 23, 36, 12, WS_TABSTOP|WS_BORDER|ES_NUMBER
	CONTROL "", IDC_CNF_SB_WIDTH_UD, "msctls_updown32", UDS_SETBUDDYINT|UDS_ALIGNRIGHT|UDS_AUTOBUDDY|UDS_ARROWKEYS|UDS_NOTHOUSANDS, 0, 0, 0, 0
	LTEXT "&Höhe :", -1, 14, 39, 54, 9
	EDITTEXT IDC_CNF_SB_HEIGHT, 68, 37, 36, 12, WS_TABSTOP|WS_BORDER|ES_NUMBER
	CONTROL "", IDC_CNF_SB_HEIGHT_UD, "msctls_updown32", UDS_SETBUDDYINT|UDS_ALIGNRIGHT|UDS_AUTOBUDDY|UDS_ARROWKEYS|UDS_NOTHOUSANDS, 0, 0, 0, 0

	GROUPBOX "Fenstergröße", -1, 10, 55, 100, 42
	LTEXT "B&reite :", -1, 14, 69, 54, 9
	EDITTEXT IDC_CNF_WIN_WIDTH, 68, 67, 36, 12, WS_TABSTOP|WS_BORDER|ES_NUMBER
	CONTROL "", IDC_CNF_WIN_WIDTH_UD, "msctls_updown32", UDS_SETBUDDYINT|UDS_ALIGNRIGHT|UDS_AUTOBUDDY|UDS_ARROWKEYS|UDS_NOTHOUSANDS, 0, 0, 0, 0
	LTEXT "Höh&e :", -1, 14, 83, 54, 9
	EDITTEXT IDC_CNF_WIN_HEIGHT, 68, 81, 36, 12, WS_TABSTOP|WS_BORDER|ES_NUMBER
	CONTROL "", IDC_CNF_WIN_HEIGHT_UD, "msctls_updown32", UDS_SETBUDDYINT|UDS_ALIGNRIGHT|UDS_AUTOBUDDY|UDS_ARROWKEYS|UDS_NOTHOUSANDS, 0, 0, 0, 0

	GROUPBOX "Programmende", -1, 115, 11, 80, 42, BS_GROUPBOX
	AUTOCHECKBOX "Konsole &schließen", IDC_CNF_CLOSE_EXIT, 119, 25, 75, 20, WS_TABSTOP
	
	GROUPBOX "Edition", -1, 115, 55, 80, 42
	COMBOBOX IDC_CNF_EDITION_MODE, 119, 69, 75, 20, CBS_DROPDOWNLIST|WS_VSCROLL|WS_TABSTOP
}

IDD_SAVE_SETTINGS DIALOG 20, 20, 140, 60
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION
CAPTION "Konsolenparameter"
FONT 8, "MS Shell Dlg"
{
	GROUPBOX "", -1, 10, 10, 120, 31, BS_GROUPBOX
	AUTORADIOBUTTON "Übernehme diese Einstellungen für spätere Sitzungen", IDC_SAV_SAVE, 14, 15, 110, 10, WS_TABSTOP
	AUTORADIOBUTTON "Verändere nur die aktuelle Sitzung", IDC_SAV_SESSION, 14, 27, 110, 10, WS_TABSTOP

	PUSHBUTTON "OK", IDOK, 20, 45, 35, 12
	PUSHBUTTON "Abbrechen", IDCANCEL, 65, 45, 35, 12
}
