/*
 * 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_1,         "Čia yra testas"
IDS_FNT_PREVIEW_2,         ""
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
}
