/*
 * WineMine
 * Russian Language Support
 *
 * Copyright 2003 Pavel Roskin
 *
 * 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

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

MENU_WINEMINE MENU DISCARDABLE
{
    POPUP "&Игра" {
        MENUITEM "&Новая игра\tF2", IDM_NEW
        MENUITEM SEPARATOR
        MENUITEM "&Вопросительные знаки", IDM_MARKQ
        MENUITEM SEPARATOR
        MENUITEM "Нови&чок",       IDM_BEGINNER
        MENUITEM "&Мастер",        IDM_ADVANCED
        MENUITEM "&Эксперт",       IDM_EXPERT
        MENUITEM "Нестандартные &параметры",   IDM_CUSTOM
        MENUITEM SEPARATOR
        MENUITEM "&Закрыть\tAlt+X",       IDM_EXIT
    }
    POPUP "&Справка" {
        MENUITEM "&Лучшее время",  IDM_TIMES
        MENUITEM "&О программе",   IDM_ABOUT
    }
}

DLG_TIMES DIALOG DISCARDABLE 0, 0, 160, 80
STYLE  DS_MODALFRAME | DS_3DLOOK |
    WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_POPUP
CAPTION "Лучшее время"
{
    GROUPBOX        "Лучшее время", -1,  10,  10, 140,  45
    LTEXT           "Новичок",      -1,  20,  20,  40,   8
    LTEXT           "Мастер",       -1,  20,  30,  40,   8
    LTEXT           "Эксперт",      -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 "Поздравляю!"
{
    LTEXT           "Пожалуйста, введите Ваше имя", -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, 140, 100
STYLE  DS_MODALFRAME | DS_3DLOOK |
    WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_POPUP
CAPTION "Нестандартные параметры"
{
    LTEXT           "По вертикали",     -1,   5,   5,  70,  10
    LTEXT           "По горизонтали",   -1,   5,  35,  70,  10
    LTEXT           "Число мин",        -1,   5,  65,  70,  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,      80,  30,  50,  15
    PUSHBUTTON      "Отмена", IDCANCEL,  80,  50,  50,  15
}
