/*
 * 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
  MENUITEM "&Заменить...\tCtrl+H", CMD_REPLACE
 }
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 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
{
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\
Продолжить?"
}
