/*
 * HTML Help resources
 * Russia Language Support
 *
 * Copyright 2008 Vitaliy Margolen
 *
 * 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_RUSSIAN, 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_BROWSE_FWD  "Просмотр вперёд"
    IDTB_BROWSE_BACK "Просмотр назад"
    IDTB_CONTENTS    "Содержание"
    IDTB_INDEX       "Оглавление"
    IDTB_SEARCH      "Поиск"
    IDTB_HISTORY     "История"
    IDTB_FAVORITES   "Избранное"
    IDTB_JUMP1       "Переход 1"
    IDTB_JUMP2       "Переход 2"
    IDTB_CUSTOMIZE   "Персонализовать"
    IDTB_ZOOM        "Масштаб"
    IDTB_TOC_NEXT    "Следующая глава"
    IDTB_TOC_PREV    "Предыдущая глава"
END
