/*
 * Copyright 2005-2006 Alexander N. Sørnes <alex@thehandofagony.com>
 * Copyright 2010 Trygve Vea <trygve.vea@gmail.com>
 *
 * 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_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL

STRINGTABLE
BEGIN
IDS_EDIT,		"R&ediger"
IDS_DEFAULT,		"Angi stan&dardverdier"
IDS_PROPERTIES,		"Egenska&per"
IDS_MARK,		"&Marker"
IDS_COPY,		"&Kopier"
IDS_PASTE,		"&Lim inn"
IDS_SELECTALL,		"Merk &alt"
IDS_SCROLL,		"&Rull"
IDS_SEARCH,		"&Søk"
IDS_FNT_DISPLAY,	"Hvert tegn er %ld piksler bredt og %ld piksler høyt"
IDS_FNT_PREVIEW,	"Dette er en test"
IDS_DLG_TIT_DEFAULT,    "Oppsett - Standardinnstillinger"
IDS_DLG_TIT_CURRENT,    "Oppsett - Gjeldende innstillinger"
IDS_DLG_TIT_ERROR,	"Konfigurasjonsfeil"
IDS_DLG_ERR_SBWINSIZE,	"Skjermens hurtigminnestørrelse må være større eller lik vinduets"

IDS_CMD_INVALID_EVENT_ID   "wineconsole: Klarte ikke lese hendelse-id\n"
IDS_CMD_INVALID_BACKEND    "wineconsole: Ugyldig motor\n"
IDS_CMD_INVALID_OPTION     "wineconsole: Ukjent kommandolinjeopsjon\n"
IDS_CMD_ABOUT              "Starter et program i en Wine-konsoll\n"
IDS_CMD_LAUNCH_FAILED      "wineconsole: Klarte ikke å starte programmet %s.\n"\
                           "Ugyldig kommando.\n"

IDS_USAGE_HEADER           "\nBruk:\n  wineconsole [alternativer] <kommando>\n\nAlternativer:\n"
IDS_USAGE_BACKEND          "  --backend={user|curses}  «user» lager et nytt vindu, mens «curses»\n"\
                           "                            prøve å bruke gjeldende terminal som Wine-konsoll\n"
IDS_USAGE_COMMAND          "  <kommando>                Wine-programmet som skal kjøres i konsollet\n"
IDS_USAGE_FOOTER           "\nEksempel:\n  wineconsole cmd\nStarter Wine-ledeteksten i et Wine-konsoll\n\n"

END

IDD_OPTION DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 140, 105
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION " Innstillinger "
FONT 8, "MS Shell Dlg"
{
	GROUPBOX "Pekerstørrelse", -1, 10, 11, 60, 44, BS_GROUPBOX
	AUTORADIOBUTTON "&Liten", IDC_OPT_CURSOR_SMALL, 14, 23, 44, 10, WS_TABSTOP
	AUTORADIOBUTTON "&Middels", IDC_OPT_CURSOR_MEDIUM, 14, 33, 44, 10, WS_TABSTOP
	AUTORADIOBUTTON "&Stor", IDC_OPT_CURSOR_LARGE, 14, 43, 44, 10, WS_TABSTOP

	GROUPBOX "Kontroll", -1, 75, 11, 125, 44, BS_GROUPBOX
	LTEXT "Hurtigmeny", -1, 79, 23, 40, 10
	AUTOCHECKBOX "&Kontroll", IDC_OPT_CONF_CTRL, 129, 23, 60, 10, WS_TABSTOP
	AUTOCHECKBOX "S&kift", IDC_OPT_CONF_SHIFT, 129, 33, 60, 10, WS_TABSTOP
	LTEXT "Rask redigering", -1, 79, 43, 50, 10
	AUTOCHECKBOX "aktiv&er", IDC_OPT_QUICK_EDIT, 129, 43, 60, 10, WS_TABSTOP

	GROUPBOX "Kommandohistorikk", -1, 10, 57, 190, 35, BS_GROUPBOX
	LTEXT "A&ntall huskede 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 "Fje&rn doble", 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 " Skrift "
FONT 8, "MS Shell Dlg"
{
	LTEXT "Skri&ft", -1, 5, 5, 24, 8
	LISTBOX IDC_FNT_LIST_FONT, 5, 18, 90, 42, LBS_SORT|WS_VSCROLL
	LTEXT "Farg&e", -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 "&Stø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 " Oppsett "
FONT 8, "MS Shell Dlg"
{
	GROUPBOX "Hurtigminnesone", -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øyde:", -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 "Vindustørrelse", -1, 10, 55, 100, 42
	LTEXT "&Bredde:", -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øyd&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 "Ved programslutt", -1, 115, 11, 80, 42, BS_GROUPBOX
	AUTOCHECKBOX "&Lukk konsoll", IDC_CNF_CLOSE_EXIT, 119, 25, 75, 20, WS_TABSTOP

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

IDD_SAVE_SETTINGS DIALOG LOADONCALL MOVEABLE DISCARDABLE 20, 20, 140, 60
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION
CAPTION "Konsoll-parametere"
FONT 8, "MS Shell Dlg"
{
	GROUPBOX "", -1, 10, 10, 120, 31, BS_GROUPBOX
	AUTORADIOBUTTON "Behold disse innstillingene for kommende økter", IDC_SAV_SAVE, 14, 15, 110, 10, WS_TABSTOP
	AUTORADIOBUTTON "Endre kun for gjeldende økt", IDC_SAV_SESSION, 14, 27, 110, 10, WS_TABSTOP

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