/*
 * wineconsole (Russian resources)
 *
 * Copyright 2003 Igor Stepin
 * Copyright 2010 Vitaly Lipatov
 *
 * 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_RUSSIAN, 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_1,	"Это тест"
IDS_FNT_PREVIEW_2,	"This is a test"
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' откроет новое окно с полной поддержкой\n"\
                           "                            всех режимов работы консоли. 'curses' - использует\n"\
                           "                            текущее окно с ограниченной функциональностью\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, 54, BS_GROUPBOX
	AUTORADIOBUTTON "&Маленький", IDC_OPT_CURSOR_SMALL, 14, 23, 52, 10, WS_TABSTOP
	AUTORADIOBUTTON "&Средний", IDC_OPT_CURSOR_MEDIUM, 14, 33, 52, 10, WS_TABSTOP
	AUTORADIOBUTTON "&Большой", IDC_OPT_CURSOR_LARGE, 14, 43, 52, 10, WS_TABSTOP

	GROUPBOX "Управление", -1, 75, 11, 123, 54, BS_GROUPBOX
	LTEXT "Всплывающее меню", -1, 79, 23, 50, 20
	AUTOCHECKBOX "&Сtrl", IDC_OPT_CONF_CTRL, 144, 23, 52, 10, WS_TABSTOP
	AUTOCHECKBOX "S&hift", IDC_OPT_CONF_SHIFT, 144, 33, 52, 10, WS_TABSTOP
	LTEXT "Быстрое редактирование", -1, 79, 43, 60, 20
	AUTOCHECKBOX "&включить", IDC_OPT_QUICK_EDIT, 144, 51, 52, 10, WS_TABSTOP

	GROUPBOX "История команд", -1, 10, 67, 189, 35, BS_GROUPBOX
	LTEXT "&История команд:", -1, 14, 77, 78, 18
	EDITTEXT IDC_OPT_HIST_SIZE, 82, 79, 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, 120, 77, 70, 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, 71, 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, 8, 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, 8, 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, 112, 11, 90, 43, BS_GROUPBOX
	AUTOCHECKBOX "&Закрывать консоль", IDC_CNF_CLOSE_EXIT, 119, 25, 79, 20, WS_TABSTOP

	GROUPBOX "Редактирование", -1, 112, 55, 90, 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, 198, 70
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION
CAPTION "Параметры консоли"
FONT 8, "MS Shell Dlg"
{
	GROUPBOX "", -1, 10, 10, 178, 31, BS_GROUPBOX
	AUTORADIOBUTTON "Сохранить эти настройки для будущих сессий", IDC_SAV_SAVE, 14, 27, 170, 10, WS_TABSTOP
	AUTORADIOBUTTON "Изменить только текущую сессию", IDC_SAV_SESSION, 14, 15, 170, 10, WS_TABSTOP

	PUSHBUTTON "OK", IDOK, 40, 50, 50, 14
	PUSHBUTTON "Отмена", IDCANCEL, 110, 50, 50, 14
}
