/*
 * Copyright 2003 Mike McCormack for CodeWeavers
 * Copyright 2010 Đorđe Vasiljević
 *
 * 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"

#pragma code_page(65001)

LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_CYRILLIC

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 "У реду", 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 "У реду", IDOK, 98, 126, 56, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON
 PUSHBUTTON "Откажи", IDCANCEL, 158, 126, 56, 14, WS_GROUP | WS_TABSTOP
}

STRINGTABLE
{
  IDS_LANCONNECTION "LAN веза"
}

LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_LATIN

IDD_PROXYDLG DIALOG 36, 24, 250, 154
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Unos mrežne lozinke"
FONT 8, "MS Shell Dlg"
{
 LTEXT "Unesite svoje korisničko ime i lozinku:", -1, 40, 6, 150, 15
 LTEXT "Posrednik", -1, 40, 26, 50, 10
 LTEXT "Domen", -1, 40, 46, 50, 10
 LTEXT "Korisničko ime", -1, 40, 66, 50, 10
 LTEXT "Lozinka", -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 "&Sačuvaj ovu lozinku (nebezbedno)", IDC_SAVEPASSWORD,
           80, 106, 150, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
 PUSHBUTTON "U redu", IDOK, 98, 126, 56, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON
 PUSHBUTTON "Otkaži", 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 "Potvrda identiteta"
FONT 8, "MS Shell Dlg"
{
 LTEXT "Unesite svoje korisničko ime i lozinku:", -1, 40, 6, 150, 15
 LTEXT "Server", -1, 40, 26, 50, 10
 LTEXT "Domen", -1, 40, 46, 50, 10
 LTEXT "Korisničko ime", -1, 40, 66, 50, 10
 LTEXT "Lozinka", -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 "&Sačuvaj ovu lozinku (nebezbedno)", IDC_SAVEPASSWORD,
           80, 106, 150, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
 PUSHBUTTON "U redu", IDOK, 98, 126, 56, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON
 PUSHBUTTON "Otkaži", IDCANCEL, 158, 126, 56, 14, WS_GROUP | WS_TABSTOP
}

STRINGTABLE
{
  IDS_LANCONNECTION "LAN veza"
}
