/*
 * Copyright 2010 Thomas Larsen
 *                Paul Vriens
 *
 * 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_DANISH, SUBLANG_DEFAULT

STRINGTABLE
BEGIN
IDS_EDIT,		"&Rediger"
IDS_DEFAULT,		"Sæt &Standarder  "
IDS_PROPERTIES,		"&Egenskaber"
IDS_MARK,		"&Marker"
IDS_COPY,		"&Kopier"
IDS_PASTE,		"&Indsæt"
IDS_SELECTALL,		"&Vælg Alt"
IDS_SCROLL,		"&Rul"
IDS_SEARCH,		"&Søg"
IDS_FNT_DISPLAY,	"Hvert tegn er %ld pixel bred og %ld pixel høj"
IDS_FNT_PREVIEW,	"Dette er en test"
IDS_DLG_TIT_DEFAULT,    "Setup - Standardindstillinger"
IDS_DLG_TIT_CURRENT,    "Setup - Aktuelle indstillinger"
IDS_DLG_TIT_ERROR,	"Konfiguration fejl"
IDS_DLG_ERR_SBWINSIZE,	"Skærm buffer størrelsen, skal være større eller lig med vinduet"

IDS_CMD_INVALID_EVENT_ID   "wineconsole: Kunne ikke fortolke begivenheds id\n"
IDS_CMD_INVALID_BACKEND    "wineconsole: Ugyldig backend\n"
IDS_CMD_INVALID_OPTION     "wineconsole: Ukendt kommandolinje valg\n"
IDS_CMD_ABOUT              "Starter et program i en Wine konsol\n"
IDS_CMD_LAUNCH_FAILED      "wineconsole: Start af programmet %s mislykkedet.\n"

IDS_USAGE_HEADER           "\nBrug:\n wineconsole [tilvalg] <kommando>\n\nValg:\n"
IDS_USAGE_BACKEND          "  --backend={user|curses} Vælges user vil det frembringe et nyt vindue. Vælges curses\n"\
                           "                          vil det prøve at ændre det nuværende terminal vindue til en Wine Konsol\n"
IDS_USAGE_COMMAND          "  <kommando>              Wine program der skal kører i konsollen\n"
IDS_USAGE_FOOTER           "\nEksempel:\n  wineconsole cmd\nStarter Wine kommandoprompten i en Wine konsol\n\n"

END

IDD_OPTION DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 140, 105
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Valg"
FONT 8, "MS Shell Dlg"
{
	GROUPBOX "Markør størrelse", -1, 10, 11, 60, 44, BS_GROUPBOX
	AUTORADIOBUTTON "&Små", IDC_OPT_CURSOR_SMALL, 14, 23, 44, 10, WS_TABSTOP
	AUTORADIOBUTTON "&Medium", IDC_OPT_CURSOR_MEDIUM, 14, 33, 44, 10, WS_TABSTOP
	AUTORADIOBUTTON "S&tore", IDC_OPT_CURSOR_LARGE, 14, 43, 44, 10, WS_TABSTOP

	GROUPBOX "Control", -1, 75, 11, 125, 44, BS_GROUPBOX
	LTEXT "Popup menu", -1, 79, 23, 40, 10
	AUTOCHECKBOX "&Control", IDC_OPT_CONF_CTRL, 129, 23, 60, 10, WS_TABSTOP
	AUTOCHECKBOX "S&hift", IDC_OPT_CONF_SHIFT, 129, 33, 60, 10, WS_TABSTOP
	LTEXT "Hurtig rediger", -1, 79, 43, 50, 10
	AUTOCHECKBOX "&Aktiver", IDC_OPT_QUICK_EDIT, 129, 43, 60, 10, WS_TABSTOP

	GROUPBOX "Kommando historik", -1, 10, 57, 190, 35, BS_GROUPBOX
	LTEXT "A&ntal af genkaldte kommandoer:", -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 "&Fjern dubletter", IDC_OPT_HIST_NODOUBLE, 130, 67, 50, 18, WS_TABSTOP|BS_MULTILINE
}

IDD_FONT DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 140, 105
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Skrifttype"
FONT 8, "MS Shell Dlg"
{
	LTEXT "&Skrifttype", -1, 5, 5, 24, 8
	LISTBOX IDC_FNT_LIST_FONT, 5, 18, 90, 42, LBS_SORT|WS_VSCROLL
	LTEXT "&Farve", -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 "S&tørrelse", -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, 76, 80, 18
}

IDD_CONFIG DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 140, 105
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Konfiguration"
FONT 8, "MS Shell Dlg"
{
	GROUPBOX "Buffer zone", -1, 10, 11, 100, 42, BS_GROUPBOX
	LTEXT "&Bredde:", -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øjde:", -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 "Vindue størrelse", -1, 10, 55, 100, 42
	LTEXT "B&redde:", -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&øjde:", -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 "Afslutning af program", -1, 115, 11, 80, 42, BS_GROUPBOX
	AUTOCHECKBOX "&Luk konsol", IDC_CNF_CLOSE_EXIT, 119, 25, 72, 20, WS_TABSTOP

	GROUPBOX "Version", -1, 115, 55, 80, 42
	COMBOBOX IDC_CNF_EDITION_MODE, 119, 69, 72, 20, CBS_DROPDOWNLIST|WS_VSCROLL|WS_TABSTOP
}

IDD_SAVE_SETTINGS DIALOG LOADONCALL MOVEABLE DISCARDABLE 20, 20, 170, 60
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION
CAPTION "Konsol parametre"
FONT 8, "MS Shell Dlg"
{
	GROUPBOX "", -1, 10, 10, 150, 31, BS_GROUPBOX
	AUTORADIOBUTTON "Bevar disse indstillinger til senere sessioner", IDC_SAV_SAVE, 14, 15, 140, 10, WS_TABSTOP
	AUTORADIOBUTTON "Rediger kun nuværende session", IDC_SAV_SESSION, 14, 27, 140, 10, WS_TABSTOP

	PUSHBUTTON "OK", IDOK, 35, 45, 35, 12
	PUSHBUTTON "Annuller", IDCANCEL, 80, 45, 35, 12
}
