/*
 * Copyright 2009 Aurimas Fišeras <aurimas@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"

/* UTF-8 */
#pragma code_page(65001)

LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL

STRINGTABLE
BEGIN
IDS_EDIT,                  "&Taisa"
IDS_DEFAULT,               "Nustatyti &numatytąsias"
IDS_PROPERTIES,            "&Savybės"
IDS_MARK,                  "&Žymėti"
IDS_COPY,                  "&Kopijuoti"
IDS_PASTE,                 "Į&dėti"
IDS_SELECTALL,             "&Pažymėti viską"
IDS_SCROLL,                "&Slinkti"
IDS_SEARCH,                "&Ieškoti"
IDS_FNT_DISPLAY,           "Kiekvienas simbolis yra %ld pikselių pločio ir %ld pikselių aukščio"
IDS_FNT_PREVIEW,         "Čia yra testas"
IDS_DLG_TIT_DEFAULT,       "Konfigūracija - numatytosios nuostatos"
IDS_DLG_TIT_CURRENT,       "Konfigūracija - dabartinės nuostatos"
IDS_DLG_TIT_ERROR,         "Konfigūracijos klaida"
IDS_DLG_ERR_SBWINSIZE,     "Ekrano buferio dydis turi būti didesnis arba lygus lango buferiui"

IDS_CMD_INVALID_EVENT_ID   "wineconsole: nepavyko išnagrinėti įvykio identifikatoriaus\n"
IDS_CMD_INVALID_BACKEND    "wineconsole: neteisinga posistemė\n"
IDS_CMD_INVALID_OPTION     "wineconsole: neatpažintas komandinės eilutės parametras\n"
IDS_CMD_ABOUT              "Paleidžia programą Wine pulte\n"
IDS_CMD_LAUNCH_FAILED      "wineconsole: nepavyko paleisti programos %s.\n"\
                           "Neteisinga komanda.\n"

IDS_USAGE_HEADER           "\nNaudojimas:\n  wineconsole [parametrai] <komanda>\n\nParametrai:\n"
IDS_USAGE_BACKEND          "  --backend={user|curses}  „User“ sukurs naują langą, „curses“ mėgins\n"\
                           "                            sukonfigūruoti dabartinį terminalą kaip Wine pultą\n"
IDS_USAGE_COMMAND          "  <komanda>                 Wine programa paleidimui pulte\n"
IDS_USAGE_FOOTER           "\nPavyzdys:\n  wineconsole cmd\nPaleidžia Wine komandų interpretatorių Wine pulte\n\n"

END

IDD_OPTION DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 140, 105
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION " Parinktys "
FONT 8, "MS Shell Dlg"
{
	GROUPBOX "Žymeklio dydis", -1, 10, 11, 60, 44, BS_GROUPBOX
	AUTORADIOBUTTON "&Mažas", IDC_OPT_CURSOR_SMALL, 14, 23, 44, 10, WS_TABSTOP
	AUTORADIOBUTTON "&Vidutinis", IDC_OPT_CURSOR_MEDIUM, 14, 33, 44, 10, WS_TABSTOP
	AUTORADIOBUTTON "&Didelis", IDC_OPT_CURSOR_LARGE, 14, 43, 44, 10, WS_TABSTOP

	GROUPBOX "Valdymas", -1, 75, 11, 125, 44, BS_GROUPBOX
	LTEXT "Iškylantis meniu", -1, 79, 23, 60, 20
	AUTOCHECKBOX "&Control", IDC_OPT_CONF_CTRL, 149, 23, 50, 10, WS_TABSTOP
	AUTOCHECKBOX "S&hift", IDC_OPT_CONF_SHIFT, 149, 33, 50, 10, WS_TABSTOP
	LTEXT "Greitas redagavimas", -1, 79, 43, 70, 10
	AUTOCHECKBOX "įjun&gti", IDC_OPT_QUICK_EDIT, 149, 43, 50, 10, WS_TABSTOP

	GROUPBOX "Komandų istorija", -1, 10, 57, 190, 35, BS_GROUPBOX
	LTEXT "Prisimintų &komandų skaičius:", -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 "&Šalinti vienodas", IDC_OPT_HIST_NODOUBLE, 130, 67, 60, 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 " Šriftas "
FONT 8, "MS Shell Dlg"
{
	LTEXT "&Šriftas", -1, 5, 5, 24, 8
	LISTBOX IDC_FNT_LIST_FONT, 5, 18, 90, 42, LBS_SORT|WS_VSCROLL
	LTEXT "&Spalva", -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 "&Dydis", -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, 124, 76, 80, 27
}

IDD_CONFIG DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 140, 105
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION " Konfigūracija "
FONT 8, "MS Shell Dlg"
{
	GROUPBOX "Buferio dydis", -1, 10, 11, 100, 42, BS_GROUPBOX
	LTEXT "&Plotis:", -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 "&Aukštis:", -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 "Lango dydis", -1, 10, 55, 100, 42
	LTEXT "P&lotis:", -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 "A&ukštis:", -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 "Programos pabaiga", -1, 115, 11, 80, 42, BS_GROUPBOX
	AUTOCHECKBOX "Už&daryti pultą", IDC_CNF_CLOSE_EXIT, 119, 25, 72, 20, WS_TABSTOP

	GROUPBOX "Laida", -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 "Pulto parametrai"
FONT 8, "MS Shell Dlg"
{
	GROUPBOX "", -1, 10, 10, 150, 31, BS_GROUPBOX
	AUTORADIOBUTTON "Išsaugoti vėlesniems seansams", IDC_SAV_SAVE, 14, 15, 140, 10, WS_TABSTOP
	AUTORADIOBUTTON "Keisti tik dabartinį seansą", IDC_SAV_SESSION, 14, 27, 140, 10, WS_TABSTOP

	PUSHBUTTON "Gerai", IDOK, 35, 45, 35, 12
	PUSHBUTTON "Atsisakyti", IDCANCEL, 80, 45, 35, 12
}
