/*
 * Help Viewer (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 "winhelp_res.h"

/* UTF-8 */
#pragma code_page(65001)

LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT

/* Menu */

MAIN_MENU MENU
{
 POPUP "&Файл" {
  MENUITEM "&Открыть", MNID_FILE_OPEN
  MENUITEM SEPARATOR
  MENUITEM "&Печатать", MNID_FILE_PRINT
  MENUITEM "Настройка &принтера...", MNID_FILE_SETUP
   MENUITEM SEPARATOR
  MENUITEM "&Выход", MNID_FILE_EXIT
 }
 POPUP "&Правка" {
   MENUITEM "&Копировать...", MNID_EDIT_COPYDLG
   MENUITEM SEPARATOR
   MENUITEM "&Заметки...", MNID_EDIT_ANNOTATE
 }
 POPUP "&Закладка" {
   MENUITEM "&Определить...", MNID_BKMK_DEFINE
 }
 POPUP "&Настройки" {
   POPUP	"Видимость окна справки"
   BEGIN
     MENUITEM "По умолчанию",	MNID_OPTS_HELP_DEFAULT
     MENUITEM "Наверху",	MNID_OPTS_HELP_VISIBLE
     MENUITEM "Не наверху",	MNID_OPTS_HELP_NONVISIBLE
  END
  MENUITEM "История",		MNID_OPTS_HISTORY
  POPUP    "Шрифт"
  BEGIN
    MENUITEM "Мелкий",		MNID_OPTS_FONTS_SMALL
    MENUITEM "Обычный",    	MNID_OPTS_FONTS_NORMAL
    MENUITEM "Крупный",     	MNID_OPTS_FONTS_LARGE
  END
  MENUITEM "Использовать системные цвета",	MNID_OPTS_SYSTEM_COLORS
 }
 POPUP "&Справка" {
   MENUITEM "Помощь &по помощи", MNID_HELP_HELPON
   MENUITEM "Всегда &сверху", MNID_HELP_HELPTOP
   MENUITEM SEPARATOR
   MENUITEM "&Информация...", MNID_HELP_ABOUT
#ifdef WINELIB
   MENUITEM "&О Wine", MNID_HELP_WINE
#endif
 }
}

IDD_INDEX DIALOG DISCARDABLE 0, 0, 200, 190
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Указатель"
{
    LISTBOX IDC_INDEXLIST, 10, 10, 180, 150, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_BORDER
}

/* Strings */
STRINGTABLE DISCARDABLE
{
STID_WINE_HELP, 	"Справка WINE"
STID_WHERROR, 		"ОШИБКА"
STID_WARNING,  		"ВНИМАНИЕ"
STID_INFO,  		"Информация"
STID_NOT_IMPLEMENTED, 	"Не реализованно"
STID_HLPFILE_ERROR_s, 	"Ошибка при чтении файла помощи `%s'"
STID_INDEX, 		"&Содержание"
STID_CONTENTS,		"Начало"
STID_BACK, 		"&Назад"
STID_ALL_FILES, 	"Все файлы (*.*)"
STID_HELP_FILES_HLP, 	"Файлы справки (*.hlp)"
STID_FILE_NOT_FOUND_s	"Не могу найти '%s'. Вы хотите найти этот файл самостоятельно?"
STID_NO_RICHEDIT	"Не могу найти richedit"
STID_PSH_INDEX,		"Содержание: "
}

CONTEXT_MENU MENU
BEGIN
	POPUP ""
	BEGIN
		MENUITEM "Заметки...",       MNID_CTXT_ANNOTATE
		MENUITEM "Копировать",                MNID_CTXT_COPY
		MENUITEM "Печать...",            MNID_CTXT_PRINT
		POPUP    "Шрифт"
		BEGIN
			MENUITEM "Мелкий",       MNID_CTXT_FONTS_SMALL
			MENUITEM "Обычный",      MNID_CTXT_FONTS_NORMAL
			MENUITEM "Крупный",       MNID_CTXT_FONTS_LARGE
		END
		POPUP   "Видимость окна справки"
		BEGIN
			MENUITEM "По умолчанию",     MNID_CTXT_HELP_DEFAULT
			MENUITEM "Наверху",     MNID_CTXT_HELP_VISIBLE
			MENUITEM "Не наверху", MNID_CTXT_HELP_NONVISIBLE
		END
		MENUITEM "Использовать системные цвета",   MNID_CTXT_SYSTEM_COLORS
	END
END
