/*
 * Copyright 2007 Robert Shearman (for CodeWeavers)
 * Copyright 2009 Michael Stefaniuc
 *
 * 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
 */

LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL

#pragma code_page(65001)

IDD_CREDDIALOG DIALOG DISCARDABLE  0, 0, 213, 149
STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "IDS_TITLEFORMAT"
FONT 8, "MS Shell Dlg"
BEGIN
    CONTROL         IDB_BANNER,-1,"Static",SS_BITMAP | SS_CENTERIMAGE,0,
                    0,213,37
    LTEXT           "IDS_MESSAGEFORMAT",IDC_MESSAGE,8,48,199,8,NOT WS_GROUP
    LTEXT           "Nume &utilizator:",-1,8,62,72,12,SS_CENTERIMAGE
    CONTROL         "",IDC_USERNAME,"ComboBoxEx32",CBS_DROPDOWN |
                    CBS_NOINTEGRALHEIGHT | WS_TABSTOP,80,62,126,87
    LTEXT           "&Parolă:",-1,8,80,72,12,SS_CENTERIMAGE
    EDITTEXT        IDC_PASSWORD,80,80,126,12,ES_PASSWORD | ES_AUTOHSCROLL
    CONTROL         "Ține minte pa&rola",IDC_SAVE,"Button",
                    BS_AUTOCHECKBOX | WS_TABSTOP,80,98,126,12
    DEFPUSHBUTTON   "OK",IDOK,97,128,50,14
    PUSHBUTTON      "Renunță",IDCANCEL,156,128,50,14
END

STRINGTABLE DISCARDABLE
{
    IDS_TITLEFORMAT     "Conectare la %s"
    IDS_MESSAGEFORMAT   "Conectez la %s"
    IDS_INCORRECTPASSWORDTITLE  "Autentificare eșuată"
    IDS_INCORRECTPASSWORD       "Verificați numele de utilizator și parola."
    IDS_CAPSLOCKONTITLE "Tasta Caps Lock este activată"
    IDS_CAPSLOCKON      "Cu tasta Caps Lock activată este foarte probabil că veți introduce parola greșit.\n\nInainte de a introduce parola apăsați tasta Caps Lock pentru a dezactiva scrierea cu majuscule."
}

#pragma code_page(default)
