/*
 * wineconsole (Russian resources)
 *
 * Copyright 2003 Igor Stepin
 *
 * 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
}
