/*
 * WineMine
 * Romanian Language Support
 *
 * Copyright 2007 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)

STRINGTABLE {
     IDS_APPNAME, "WineMine"
     IDS_NOBODY,  "Nimeni"
     IDS_ABOUT,   "Copyright 2000 Joshua Thielen"
}

MENU_WINEMINE MENU DISCARDABLE
{
    POPUP "&Opţiuni" {
        MENUITEM "&Nou\tF2",       IDM_NEW
        MENUITEM SEPARATOR
        MENUITEM "&Mark Question", IDM_MARKQ
        MENUITEM SEPARATOR
        MENUITEM "&Începător",     IDM_BEGINNER
        MENUITEM "&Avansat",       IDM_ADVANCED
        MENUITEM "&Expert",        IDM_EXPERT
        MENUITEM "&Personalizat",  IDM_CUSTOM
        MENUITEM SEPARATOR
        MENUITEM "&Ieşire\tAlt+X", IDM_EXIT
    }
    POPUP "&Informaţii" {
        MENUITEM "&Scoruri maxime", IDM_TIMES
        MENUITEM "&Despre",         IDM_ABOUT
    }
}

DLG_TIMES DIALOG DISCARDABLE 0, 0, 160, 80
STYLE  DS_MODALFRAME | DS_3DLOOK |
    WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_POPUP
CAPTION "Scoruri maxime"
{
    GROUPBOX        "Scoruri maxime", -1,  10,  10, 140,  45
    LTEXT           "&Începător",     -1,  20,  20,  40,   8
    LTEXT           "Avansat",        -1,  20,  30,  40,   8
    LTEXT           "Expert",         -1,  20,  40,  40,   8
    LTEXT           "999",            IDC_TIME1, 70,  20,  15,   8
    LTEXT           "999",            IDC_TIME2, 70,  30,  15,   8
    LTEXT           "999",            IDC_TIME3, 70,  40,  15,   8
    LTEXT           "",               IDC_NAME1, 90,  20,  55,   8
    LTEXT           "",               IDC_NAME2, 90,  30,  55,   8
    LTEXT           "",               IDC_NAME3, 90,  40,  55,   8
    DEFPUSHBUTTON   "OK",             IDOK,      55,  60,  50,  15
}

DLG_CONGRATS DIALOG DISCARDABLE  0, 0, 160, 60
STYLE  DS_MODALFRAME | DS_3DLOOK |
    WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_POPUP
CAPTION "Felicitări!"
{
    LTEXT           "Scrieţi-vă numele", -1,      10,  10, 150,  10
    EDITTEXT                             IDC_EDITNAME,  25,  20, 110,  12
    DEFPUSHBUTTON   "OK",                IDOK,          60,  40,  40,  15
}

DLG_CUSTOM DIALOG DISCARDABLE  0, 0, 100, 100
STYLE  DS_MODALFRAME | DS_3DLOOK |
    WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_POPUP
CAPTION "Joc personalizat"
{
    LTEXT           "Linii",   -1,   5,   5,  30,  10
    LTEXT           "Coloane", -1,   5,  35,  30,  10
    LTEXT           "Mine",    -1,   5,  65,  30,  10
    EDITTEXT               IDC_EDITROWS,   5,  15,  20,  12, ES_NUMBER
    EDITTEXT               IDC_EDITCOLS,   5,  45,  20,  12, ES_NUMBER
    EDITTEXT               IDC_EDITMINES,  5,  75,  20,  12, ES_NUMBER
    DEFPUSHBUTTON   "OK",      IDOK,      40,  30,  50,  15
    PUSHBUTTON      "Renunţă", IDCANCEL,  40,  50,  50,  15
}

#pragma code_page(default)
