/*
 *  Notepad (Ukrainian resources)
 *
 *  Copyright 1997,98 Marcel Baur <mbaur@g26.ethz.ch>
 *  Proofread 1998 by David Lee Lambert <lamber45@egr.msu.edu>
 *  Copyright 2002 Sylvain Petreolle <spetreolle@yahoo.fr>
 *  Copyright 2010 Igor Paliychuk
 *
 * 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_UKRAINIAN, 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 "Виділити в&се\tCtrl+A",       CMD_SELECT_ALL
  MENUITEM "&Час/Дата\tF5",    CMD_TIME_DATE
  MENUITEM SEPARATOR
  MENUITEM "&Перенос  слів",  CMD_WRAP
  MENUITEM "&Шрифт...",          CMD_FONT
 }
POPUP "&Пошук" {
  MENUITEM "&Знайти...\tCtrl+F",   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  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\
Створити новий файл?"
STRING_NOTSAVED,                                "Файл '%s' було змінено.\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\
Файл містить Юнікод-текст, який буде втрачено при збереженні файлу\n\
в кодуванні %s .\n\
Щоб не втратити цей текст, натисніть Скасувати, та\n\
виберіть зі списку один з варіантів Юнікод.\n\
Продовжити?"
}
