/*
 *  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 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\
Створити новий файл?"
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\
Продовжити?"
}
