/*
 * wininet.dll (Russian resources)
 *
 * Copyright 2003 Igor Stepin
 *
 * 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

IDD_PROXYDLG DIALOG 36, 24, 250, 154
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Ввод сетевого пароля"
FONT 8, "MS Shell Dlg"
{
 LTEXT "Введите имя пользователя и пароль:", -1, 40, 6, 150, 15
 LTEXT "Прокси", -1, 40, 26, 50, 10
 LTEXT "Домен", -1, 40, 46, 50, 10
 LTEXT "Пользователь", -1, 40, 66, 50, 10
 LTEXT "Пароль", -1, 40, 86, 50, 10
 LTEXT "", IDC_PROXY, 80, 26, 150, 14, 0
 LTEXT "", IDC_REALM, 80, 46, 150, 14, 0
 EDITTEXT IDC_USERNAME, 80, 66, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP
 EDITTEXT IDC_PASSWORD, 80, 86, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP | ES_PASSWORD
 CHECKBOX "&Сохранить этот пароль (небезопасно)", IDC_SAVEPASSWORD,
           80, 106, 150, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
 PUSHBUTTON "OK", IDOK, 98, 126, 56, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON
 PUSHBUTTON "Отмена", IDCANCEL, 158, 126, 56, 14, WS_GROUP | WS_TABSTOP
}

IDD_AUTHDLG DIALOG 36, 24, 250, 154
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Требуется идентификация"
FONT 8, "MS Shell Dlg"
{
 LTEXT "Введите имя пользователя и пароль:", -1, 40, 6, 150, 15
 LTEXT "Сервер", -1, 40, 26, 50, 10
 LTEXT "Домен", -1, 40, 46, 50, 10
 LTEXT "Пользователь", -1, 40, 66, 50, 10
 LTEXT "Пароль", -1, 40, 86, 50, 10
 LTEXT "", IDC_SERVER, 80, 26, 150, 14, 0
 LTEXT "", IDC_REALM, 80, 46, 150, 14, 0
 EDITTEXT IDC_USERNAME, 80, 66, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP
 EDITTEXT IDC_PASSWORD, 80, 86, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP | ES_PASSWORD
 CHECKBOX "&Сохранить этот пароль (небезопасно)", IDC_SAVEPASSWORD,
           80, 106, 150, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
 PUSHBUTTON "OK", IDOK, 98, 126, 56, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON
 PUSHBUTTON "Отмена", IDCANCEL, 158, 126, 56, 14, WS_GROUP | WS_TABSTOP
}
