/*
 * Notepad (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 "notepad_res.h"

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

LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT

MAIN_MENU MENU
{
 POPUP "&Файл" {
  MENUITEM "Созд&ать\tCtrl+N",           CMD_NEW
  MENUITEM "&Открыть...\tCtrl+O",             CMD_OPEN
  MENUITEM "&Сохранить\tCtrl+S",             CMD_SAVE
  MENUITEM "Сохранить &как...",       CMD_SAVE_AS
  MENUITEM SEPARATOR
  MENUITEM "&Печатать...\tCtrl+P",      CMD_PRINT
  MENUITEM "Пара&метры страницы...",    CMD_PAGE_SETUP
  MENUITEM "&Настройка принтера...", CMD_PRINTER_SETUP
  MENUITEM SEPARATOR
  MENUITEM "В&ыход",             CMD_EXIT
 }
POPUP "&Правка" {
  MENUITEM "&Отменить\tCtrl+Z",     CMD_UNDO
  MENUITEM SEPARATOR
  MENUITEM "&Вырезать\tCtrl+X",      CMD_CUT
  MENUITEM "&Копировать\tCtrl+C",     CMD_COPY
  MENUITEM "Вст&авить\tCtrl+V",    CMD_PASTE
  MENUITEM "&Удалить\tDel",      CMD_DELETE
  MENUITEM SEPARATOR
  MENUITEM "Выделить в&се",       CMD_SELECT_ALL
  MENUITEM "Врем&я и дата\tF5",    CMD_TIME_DATE
  MENUITEM SEPARATOR
  MENUITEM "&Перенос по словам",  CMD_WRAP
  MENUITEM "&Шрифт...",           CMD_FONT
 }
POPUP "П&оиск" {
  MENUITEM "&Найти...",           CMD_SEARCH
  MENUITEM "Найти &далее\tF3",  CMD_SEARCH_NEXT
 }
POPUP "&Справка" {
  MENUITEM "&Содержание",         CMD_HELP_CONTENTS
  MENUITEM "&Поиск...",        CMD_HELP_SEARCH
  MENUITEM "&Использование справки",     CMD_HELP_ON_HELP
  MENUITEM SEPARATOR
  MENUITEM "&О Notepad", CMD_HELP_ABOUT_NOTEPAD
 }
}

/* Dialog `Page setup' */

DIALOG_PAGESETUP DIALOG 0, 0, 225, 95
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Параметры страницы"
{
LTEXT    "В&ерхний колонтитул:",  0x140,   10, 07, 40, 15
EDITTEXT IDC_PAGESETUP_HEADERVALUE,   60, 05,110, 12, WS_BORDER | WS_TABSTOP
LTEXT    "Н&ижний колонтитул:",  0x142,   10, 24, 40, 15
EDITTEXT IDC_PAGESETUP_FOOTERVALUE,   60, 22,110, 12, WS_BORDER | WS_TABSTOP

GROUPBOX "Поля (мм):",      0x144,     10, 43,160, 45
LTEXT    "&Левое:",        0x145,   20, 55, 30, 10, WS_CHILD
EDITTEXT IDC_PAGESETUP_LEFTVALUE,     50, 55, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    "&Верхнее:",         0x148,    20, 73, 30, 10, WS_CHILD
EDITTEXT IDC_PAGESETUP_TOPVALUE,      50, 73, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    "&Правое:",       0x14B, 100, 55, 30, 10, WS_CHILD
EDITTEXT IDC_PAGESETUP_RIGHTVALUE,   130, 55, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    "&Нижнее:",      0x14E,100, 73, 30, 10, WS_CHILD
EDITTEXT IDC_PAGESETUP_BOTTOMVALUE,  130, 73, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP

DEFPUSHBUTTON "OK",         IDOK,                   180,  3, 40, 15, WS_TABSTOP
PUSHBUTTON    "Отмена",     IDCANCEL,               180, 21, 40, 15, WS_TABSTOP
PUSHBUTTON    "&Справка",       IDHELP,                180, 39, 40, 15, WS_TABSTOP
}

IDD_OFN_TEMPLATE  DIALOG  DISCARDABLE 50,50,300,15
STYLE DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_BORDER
FONT 8, "MS Shell Dlg"
BEGIN
  LTEXT "Кодировка:", -1, 5,0, 50,12
  COMBOBOX IDC_OFN_ENCCOMBO, 53,0, 156,48, WS_CHILD | WS_VSCROLL | CBS_DROPDOWNLIST
END

STRINGTABLE DISCARDABLE
{
STRING_PAGESETUP_HEADERVALUE,   "&f"
STRING_PAGESETUP_FOOTERVALUE,   "Страница &p"

STRING_NOTEPAD,                                 "Блокнот"
STRING_ERROR,                                   "ОШИБКА"
STRING_WARNING,                                 "ВНИМАНИЕ"
STRING_INFO,                                    "Информация"

STRING_UNTITLED,                                "(без заголовка)"

STRING_ALL_FILES,                               "Все файлы (*.*)"
STRING_TEXT_FILES_TXT,                  "Текстовые файлы (*.txt)"

STRING_TOOLARGE,                                "Файл '%s' слишком большой для блокнота.\n \
Используйте другой редактор."
STRING_NOTEXT,                                  "Вы не ввели никакого текста. \
\nВведите что-нибудь и попробуйте еще."
STRING_DOESNOTEXIST,                            "Файл '%s'\nне существует\n\n \
Хотите создать новый файл?"
STRING_NOTSAVED,                                "Файл '%s'\nбыл изменен\n\n \
Хотите сохранить изменения?"
STRING_NOTFOUND,                                        "'%s' не найден."
STRING_OUT_OF_MEMORY,                   "Недостаточно памяти для завершения этой операции \
\nЗакройте одно или несколько приложений и повторите попытку."

STRING_UNICODE_LE,     "Юникод (UTF-16)"
STRING_UNICODE_BE,     "Юникод (UTF-16 big-endian)"

STRING_LOSS_OF_UNICODE_CHARACTERS,         "%s\n\
Этот файл содержит текст в формате Юникод, который будет потерян, если вы сохраните этот файл как файл в кодировке %s.\n\
Чтобы сохранить данные в формате Юникод, нажмите кнопку \"Отмена\" и выберите\n\
один из вариантов сохранения в формате Юникод.\n\
Продолжить?"
}
