/*
 * HTML Help resources
 * Ukrainian Language Support
 *
 * Copyright 2005 James Hawkins
 * Copyright 2007 Artem Reznikov
 * 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 "resource.h"

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

LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT

STRINGTABLE
BEGIN
    IDS_CONTENTS     "&Зміст"
    IDS_INDEX        "&Вказівник"
    IDS_SEARCH       "&Пошук"
    IDS_FAVORITES    "&Обране"
END

STRINGTABLE
BEGIN
    IDTB_EXPAND      "Показувати"
    IDTB_CONTRACT    "Приховати"
    IDTB_STOP        "Зупинити"
    IDTB_REFRESH     "Оновити"
    IDTB_BACK        "Назад"
    IDTB_HOME        "Додому"
    IDTB_SYNC        "Синхронізувати"
    IDTB_PRINT       "Друк"
    IDTB_OPTIONS     "Параметри"
    IDTB_FORWARD     "Вперед"
    IDTB_NOTES       "IDTB_NOTES"
    IDTB_BROWSE_FWD  "IDTB_BROWSE_FWD"
    IDTB_BROWSE_BACK "IDT_BROWSE_BACK"
    IDTB_CONTENTS    "IDTB_CONTENTS"
    IDTB_INDEX       "IDTB_INDEX"
    IDTB_SEARCH      "IDTB_SEARCH"
    IDTB_HISTORY     "IDTB_HISTORY"
    IDTB_FAVORITES   "IDTB_FAVORITES"
    IDTB_JUMP1       "Jump1"
    IDTB_JUMP2       "Jump2"
    IDTB_CUSTOMIZE   "Налаштування"
    IDTB_ZOOM        "Збільшення"
    IDTB_TOC_NEXT    "IDTB_TOC_NEXT"
    IDTB_TOC_PREV    "IDTB_TOC_PREV"
END

LANGUAGE LANG_UKRAINIAN, SUBLANG_NEUTRAL

STRINGTABLE
BEGIN
    IDS_CONTENTS     "&Зміст"
    IDS_INDEX        "&Вказівник"
    IDS_SEARCH       "&Пошук"
    IDS_FAVORITES    "&Обране"
END
