/*
 * Hebrew resources for the Internet control panel applet
 *
 * Copyright 2010 Detlef Riekenberg
 * 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 "inetcpl.h"

#pragma code_page(65001)

LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT

STRINGTABLE DISCARDABLE
BEGIN
    IDS_CPL_NAME        "הגדרות אינטרנט"
    IDS_CPL_INFO        "הגדרת דפדפן האינטרנט של Wine והגדרות שקשורות בו"
END

/* "General" propsheet */
IDD_GENERAL DIALOG  0, 0, 320, 220
STYLE WS_CAPTION | WS_CHILD | WS_DISABLED
EXSTYLE WS_EX_LAYOUTRTL
FONT 8, "MS Shell Dlg"
CAPTION "כללי"
BEGIN

    GROUPBOX    " דף הבית ", IDC_STATIC, 4, 4, 312, 52
    LTEXT       "באפשרותך לבחור את הכתובת שתשמש כדף הבית שלך.",
                IDC_STATIC, 58, 10, 252, 10
    EDITTEXT    IDC_HOME_EDIT, 58, 22, 252, 12, WS_VISIBLE | ES_AUTOHSCROLL
    PUSHBUTTON  "העמוד ה&נוכחי", IDC_HOME_CURRENT, 58, 36, 80, 14
    PUSHBUTTON  "עמוד &בררת המחדל", IDC_HOME_DEFAULT, 144, 36, 80, 14
    PUSHBUTTON  "עמוד &ריק", IDC_HOME_BLANK, 230, 36, 80, 14

END

/* "Content" propsheet */
IDD_CONTENT DIALOG  0, 0, 320, 220
STYLE WS_CAPTION | WS_CHILD | WS_DISABLED
EXSTYLE WS_EX_LAYOUTRTL
FONT 8, "MS Shell Dlg"
CAPTION "תוכן"
BEGIN

    GROUPBOX    " אישורים ", IDC_STATIC, 4, 4, 312, 50
    LTEXT       "אישורים משמשים כדי לזהות אותך וגם כדי לזהות רשויות ומפיצים.",
                IDC_STATIC, 58, 14, 252, 18
    PUSHBUTTON  "אישורים...", IDC_CERT, 146, 34, 80, 14
    PUSHBUTTON	"מפיצים...", IDC_CERT_PUBLISHER, 230, 34, 80, 14

END
