/*
 * Copyright 2001 Eric Pouech
 * Copyright 2010 Igor Paliychuk
 *
 * 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_UKRAINIAN, SUBLANG_DEFAULT

STRINGTABLE
BEGIN
IDS_EDIT,		"Реда&гування"
IDS_DEFAULT,		"За &замовчанням"
IDS_PROPERTIES,		"&Властивості"
IDS_MARK,		"Ві&дзначити"
IDS_COPY,		"&Копіювати"
IDS_PASTE,		"В&ставити"
IDS_SELECTALL,		"Вид&ілити все"
IDS_SCROLL,		"Прок&рутити"
IDS_SEARCH,		"По&шук"
IDS_FNT_DISPLAY,	"Кожен символ має %ld пікселів в ширину і %ld пікселів в висоту"
IDS_FNT_PREVIEW,	"Це тест"
IDS_DLG_TIT_DEFAULT,    "Налаштування - Станд. параметри"
IDS_DLG_TIT_CURRENT,    "Налаштування - Поточні параметри"
IDS_DLG_TIT_ERROR,	"Помилка конфігурації"
IDS_DLG_ERR_SBWINSIZE,	"Розмір буфера екрану повинен бути не менший буфера вікна"

IDS_CMD_INVALID_EVENT_ID   "wineconsole: Невірний код події\n"
IDS_CMD_INVALID_BACKEND    "wineconsole: Невірний backend\n"
IDS_CMD_INVALID_OPTION     "wineconsole: Невідомий параметр командного рядка\n"
IDS_CMD_ABOUT              "Запуск програми в консолі Wine\n"
IDS_CMD_LAUNCH_FAILED      "wineconsole: Запуск програми %s не вдався.\n"\
                           "Команда невірна.\n"

IDS_USAGE_HEADER           "\nВикористання:\n  wineconsole [параметри] <команда>\n\nПараметри:\n"
IDS_USAGE_BACKEND          "  --backend={user|curses}  Вибір user відкриє нове вікно, curses спробує\n"\
                           "                            налаштувати поточний термінал як консоль Wine\n"
IDS_USAGE_COMMAND          "  <команда>                 Назва програми для запуску в консолі Wine\n"
IDS_USAGE_FOOTER           "\nПриклад:\n  wineconsole cmd\nЗапуск командного рядка Wine в консолі Wine\n\n"

END

IDD_OPTION DIALOG 36, 24, 140, 105
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION " Параметри "
FONT 8, "MS Shell Dlg"
{
	GROUPBOX "Розмір курсора", -1, 10, 11, 60, 44, BS_GROUPBOX
	AUTORADIOBUTTON "&Малий", IDC_OPT_CURSOR_SMALL, 14, 23, 44, 10, WS_TABSTOP
	AUTORADIOBUTTON "&Середній", IDC_OPT_CURSOR_MEDIUM, 14, 33, 44, 10, WS_TABSTOP
	AUTORADIOBUTTON "&Великий", IDC_OPT_CURSOR_LARGE, 14, 43, 44, 10, WS_TABSTOP

	GROUPBOX "Керування", -1, 75, 11, 125, 44, BS_GROUPBOX
	LTEXT "Сплив. меню", -1, 79, 23, 44, 10
	AUTOCHECKBOX "&Control", IDC_OPT_CONF_CTRL, 140, 23, 60, 10, WS_TABSTOP
	AUTOCHECKBOX "S&hift", IDC_OPT_CONF_SHIFT, 140, 33, 60, 10, WS_TABSTOP
	LTEXT "Швидке редагув.", -1, 79, 43, 58, 10
	AUTOCHECKBOX "вв&імкнути", IDC_OPT_QUICK_EDIT, 140, 43, 60, 10, WS_TABSTOP

	GROUPBOX "Історія команд", -1, 10, 57, 190, 35, BS_GROUPBOX
	LTEXT "&Кількість нагаданих команд :", -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 "Видаляти &повтори", IDC_OPT_HIST_NODOUBLE, 140, 67, 50, 18, WS_TABSTOP|BS_MULTILINE
}

IDD_FONT DIALOG 36, 24, 140, 105
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION " Шрифт "
FONT 8, "MS Shell Dlg"
{
	LTEXT "&Шрифт", -1, 5, 5, 24, 8
	LISTBOX IDC_FNT_LIST_FONT, 5, 18, 90, 42, LBS_SORT|WS_VSCROLL
	LTEXT "&Колір", -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 "&Розмір", -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, 25
}

IDD_CONFIG DIALOG 36, 24, 140, 105
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION " Конфігурація "
FONT 8, "MS Shell Dlg"
{
	GROUPBOX "Зона буфера", -1, 10, 11, 100, 42, BS_GROUPBOX
	LTEXT "&Ширина :", -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 "&Висота :", -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 "Розмір вікна", -1, 10, 55, 100, 42
	LTEXT "Ш&ирина :", -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 "Висо&та :", -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 "Завершення програми", -1, 115, 11, 84, 42, BS_GROUPBOX
	AUTOCHECKBOX "&Закрити консоль", IDC_CNF_CLOSE_EXIT, 119, 25, 72, 20, WS_TABSTOP

	GROUPBOX "Випуск", -1, 115, 55, 84, 42
	COMBOBOX IDC_CNF_EDITION_MODE, 119, 69, 72, 20, CBS_DROPDOWNLIST|WS_VSCROLL|WS_TABSTOP
}

IDD_SAVE_SETTINGS DIALOG 20, 20, 202, 60
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION
CAPTION "Параметри консолі"
FONT 8, "MS Shell Dlg"
{
	GROUPBOX "", -1, 10, 10, 182, 31, BS_GROUPBOX
	AUTORADIOBUTTON "Зберегти ці налаштування для наступних сесій", IDC_SAV_SAVE, 14, 15, 172, 10, WS_TABSTOP
	AUTORADIOBUTTON "Змінювати лише поточну сесію", IDC_SAV_SESSION, 14, 27, 140, 10, WS_TABSTOP

	PUSHBUTTON "OK", IDOK, 55, 45, 40, 12
	PUSHBUTTON "Скасувати", IDCANCEL, 105, 45, 40, 12
}
