/*
 * WineMine
 * Hebrew Language Support
 *
 * Copyright 2000 Joshua Thielen
 * Copyright 2003 Marcelo Duarte
 * Copyright 2010 Yaron Shahrabani <sh.yaron@gmail.com>
 *
 * 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_HEBREW, SUBLANG_DEFAULT

STRINGTABLE {
     IDS_APPNAME, "WineMine"
     IDS_NOBODY,  "אף אחד"
     IDS_ABOUT,   "כל הזכויות שמורות 2000 Joshua Thielen"
}

MENU_WINEMINE MENU
{
    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 0, 0, 160, 80
STYLE  DS_MODALFRAME | DS_3DLOOK |
    WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_POPUP
EXSTYLE WS_EX_LAYOUTRTL
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   "אישור",                IDOK,  55,  60,  50,  15
}

DLG_CONGRATS DIALOG  0, 0, 160, 60
STYLE  DS_MODALFRAME | DS_3DLOOK |
    WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_POPUP
EXSTYLE WS_EX_LAYOUTRTL
CAPTION "כל הכבוד!"
{
    LTEXT           "נא להזין את שמך", -1,  10,  10, 150,  10
    EDITTEXT                              IDC_EDITNAME,  25,  20, 110,  12
    DEFPUSHBUTTON   "אישור",                         IDOK,  60,  40,  40,  15
}

DLG_CUSTOM DIALOG  0, 0, 100, 100
STYLE  DS_MODALFRAME | DS_3DLOOK |
    WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_POPUP
EXSTYLE WS_EX_LAYOUTRTL
CAPTION "משחק בהתאמה אישית"
{
    LTEXT           "שורות",   -1,   5,   5,  30,  10
    LTEXT           "עמודות",   -1,   5,  35,  30,  10
    LTEXT           "מוקשים",  -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   "אישור",     IDOK,      40,  30,  50,  15
    PUSHBUTTON      "ביטול", IDCANCEL,  40,  50,  50,  15
}
