/*
 * Russian resources for the Internet control panel applet
 *
 * Copyright 2011 Alexander Lakhin
 *
 * 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 "inetcpl.h"

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

LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT

/* "General" propsheet */
IDD_GENERAL DIALOG  0, 0, 320, 220
STYLE WS_CAPTION | WS_CHILD | WS_DISABLED
FONT 8, "MS Shell Dlg"
CAPTION "Общие"
BEGIN

    GROUPBOX    " Домашняя страница ", IDC_STATIC, 4, 4, 312, 52
    LTEXT       "Укажите адрес для вашей домашней страницы:",
                IDC_STATIC, 58, 14, 252, 8
    EDITTEXT    IDC_HOME_EDIT, 58, 22, 252, 12, WS_VISIBLE | ES_AUTOHSCROLL
    PUSHBUTTON  "&Текущая страница", IDC_HOME_CURRENT, 58, 36, 80, 14
    PUSHBUTTON  "&По умолчанию", IDC_HOME_DEFAULT, 144, 36, 80, 14
    PUSHBUTTON  "Пу&стая страница", IDC_HOME_BLANK, 230, 36, 80, 14
    GROUPBOX    " История использования браузера ", IDC_STATIC, 4, 60, 312, 46
    LTEXT       "Вы можете удалить кэшированные страницы, файлы cookies и другие данные.",
                IDC_STATIC, 58, 72, 252, 10
    PUSHBUTTON  "Удалить &файлы...", IDC_HISTORY_DELETE, 144, 86, 80, 14
    PUSHBUTTON  "&Настройки...", IDC_HISTORY_SETTINGS, 230, 86, 80, 14

END

/* "Delete browsing history" dialog */
IDD_DELETE_HISTORY DIALOG  0, 0, 250, 250
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Очистка истории"
BEGIN

    AUTOCHECKBOX   "Временные файлы\nКэшированные копии страниц, изображений и сертификатов.",
                    IDC_DELETE_TEMP_FILES, 10, 8, 230, 30, BS_TOP | BS_MULTILINE
    AUTOCHECKBOX   "Файлы cookies\nФайлы, сохранённые на вашем компьютере, могут содержать пользовательские настройки и информацию для авторизации.",
                    IDC_DELETE_COOKIES, 10, 38, 230, 30, BS_TOP | BS_MULTILINE
    AUTOCHECKBOX   "История\nПеречень сайтов, к которым осуществлялся доступ.",
                    IDC_DELETE_HISTORY, 10, 68, 230, 30, BS_TOP | BS_MULTILINE
    AUTOCHECKBOX   "Данные веб-форм\nИмена пользователя и другая информация, которая использовалась при заполнении форм.",
                    IDC_DELETE_FORM_DATA, 10, 98, 230, 30, BS_TOP | BS_MULTILINE
    AUTOCHECKBOX   "Пароли\nСохранённые пароли, которые были указаны в веб-формах.",
                    IDC_DELETE_PASSWORDS, 10, 128, 230, 30, BS_TOP | BS_MULTILINE
    DEFPUSHBUTTON  "Отмена", IDCANCEL, 185, 230, 60, 15, WS_GROUP
    PUSHBUTTON     "Удалить", IDOK, 120, 230, 60, 15, WS_GROUP

END

/* "Security" propsheet */
IDD_SECURITY DIALOG  0, 0, 320, 220
STYLE WS_CAPTION | WS_CHILD | WS_DISABLED
FONT 8, "MS Shell Dlg"
CAPTION "Безопасность"
BEGIN

    CONTROL     "Listview", IDC_SEC_LISTVIEW, "SysListView32",
                LVS_ICON | LVS_ALIGNLEFT | LVS_AUTOARRANGE | LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER | WS_VSCROLL,
                4, 4, 312, 58
    LTEXT       "", IDC_SEC_ZONE_INFO, 4, 68, 312, 20
    GROUPBOX    "", IDC_SEC_GROUP, 4, 88, 312, 126
    CONTROL     "trackbar", IDC_SEC_TRACKBAR, "msctls_trackbar32",
                TBS_VERT | TBS_AUTOTICKS | TBS_BOTH | TBS_REVERSED, 8, 98, 32, 100
    LTEXT       "", IDC_SEC_LEVEL, 48, 102, 180, 12
    LTEXT       "", IDC_SEC_LEVEL_INFO, 48, 114, 260, 80

END

/* "Content" propsheet */
IDD_CONTENT DIALOG  0, 0, 320, 220
STYLE WS_CAPTION | WS_CHILD | WS_DISABLED
FONT 8, "MS Shell Dlg"
CAPTION "Содержание"
BEGIN

    GROUPBOX    " Сертификаты ", IDC_STATIC, 4, 4, 312, 50
    LTEXT       "Сертификаты используются для идентификации личности, а также для проверки подлинности центров сертификации и издателей.",
                IDC_STATIC, 58, 14, 252, 18
    PUSHBUTTON  "Сертификаты...", IDC_CERT, 146, 34, 80, 14
    PUSHBUTTON	"Издатели...", IDC_CERT_PUBLISHER, 230, 34, 80, 14

END
