/*
 * 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 LOADONCALL MOVEABLE DISCARDABLE 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 LOADONCALL MOVEABLE DISCARDABLE 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 LOADONCALL MOVEABLE DISCARDABLE 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 LOADONCALL MOVEABLE DISCARDABLE 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
}
