/*
 *  Notepad (Hebrew resources)
 *
 *  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 "notepad_res.h"

#pragma code_page(65001)

LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT

MAIN_MENU MENU
{
 POPUP "&קובץ" {
  MENUITEM "&חדש\tCtrl+N",      CMD_NEW
  MENUITEM "&פתיחה...\tCtrl+O",  CMD_OPEN
  MENUITEM "&שמירה\tCtrl+S",     CMD_SAVE
  MENUITEM "שמירה &בשם...",       CMD_SAVE_AS
  MENUITEM SEPARATOR
  MENUITEM "ה&דפסה...\tCtrl+P",            CMD_PRINT
  MENUITEM "ה&גדרות עמוד...",    CMD_PAGE_SETUP
  MENUITEM "הגדרות מ&דפסת...", CMD_PRINTER_SETUP
  MENUITEM SEPARATOR
  MENUITEM "י&ציאה",             CMD_EXIT
 }
POPUP "ע&ריכה" {
  MENUITEM "&ביטול\tCtrl+Z",     CMD_UNDO
  MENUITEM SEPARATOR
  MENUITEM "ג&זירה\tCtrl+X",      CMD_CUT
  MENUITEM "ה&עתקה\tCtrl+C",     CMD_COPY
  MENUITEM "ה&דבקה\tCtrl+V",    CMD_PASTE
  MENUITEM "&מחיקה\tDel",      CMD_DELETE
  MENUITEM SEPARATOR
  MENUITEM "בחירת ה&כול\tCtrl+A",       CMD_SELECT_ALL
  MENUITEM "&שעה/תאריך\tF5",    CMD_TIME_DATE
  MENUITEM SEPARATOR
  MENUITEM "שבירת שורות &ארוכות",  CMD_WRAP
  MENUITEM "&גופן...",          CMD_FONT
 }
POPUP "&חיפוש" {
  MENUITEM "&חיפוש...\tCtrl+F",   CMD_SEARCH
  MENUITEM "חיפוש ה&בא\tF3",  CMD_SEARCH_NEXT
  MENUITEM "החל&פה...\tCtrl+H", CMD_REPLACE
 }
POPUP "ע&זרה" {
  MENUITEM "&תכנים",         CMD_HELP_CONTENTS
  MENUITEM "&חיפוש...",        CMD_HELP_SEARCH
  MENUITEM "ע&זרה לעזרה",     CMD_HELP_ON_HELP
  MENUITEM SEPARATOR
  MENUITEM "על &אודות פנקס רשימות", CMD_HELP_ABOUT_NOTEPAD
 }
}

/* Dialog `Page setup' */

DIALOG_PAGESETUP DIALOG 0, 0, 225, 95
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_LAYOUTRTL
FONT 8, "MS Shell Dlg"
CAPTION "הגדרות עמוד"
{
LTEXT    "כותרת &עליונה:",  0x140,  10, 07, 40, 15
EDITTEXT IDC_PAGESETUP_HEADERVALUE,   60, 05,110, 12, WS_BORDER | WS_TABSTOP
LTEXT    "כותרת &תחתונה:",  0x142,   10, 24, 40, 15
EDITTEXT IDC_PAGESETUP_FOOTERVALUE,   60, 22,110, 12, WS_BORDER | WS_TABSTOP

GROUPBOX "&שוליים (מילימטרים):",      0x144,     10, 43,160, 45
LTEXT    "&שמאליים:",        0x145,   20, 55, 30, 10, WS_CHILD
EDITTEXT IDC_PAGESETUP_LEFTVALUE,     50, 55, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    "&עליונים:",         0x148,    20, 73, 30, 10, WS_CHILD
EDITTEXT IDC_PAGESETUP_TOPVALUE,      50, 73, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    "&ימניים:",       0x14B, 100, 55, 30, 10, WS_CHILD
EDITTEXT IDC_PAGESETUP_RIGHTVALUE,   130, 55, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    "&תחתונים:",      0x14E,100, 73, 30, 10, WS_CHILD
EDITTEXT IDC_PAGESETUP_BOTTOMVALUE,  130, 73, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP

DEFPUSHBUTTON "אישור",         IDOK,                   180,  3, 40, 15, WS_TABSTOP
PUSHBUTTON    "ביטול",     IDCANCEL,               180, 21, 40, 15, WS_TABSTOP
PUSHBUTTON    "ע&זרה",       IDHELP,                180, 39, 40, 15, WS_TABSTOP
}

IDD_OFN_TEMPLATE  DIALOG 50,50,300,15
STYLE DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_BORDER
EXSTYLE WS_EX_LAYOUTRTL
FONT 8, "MS Shell Dlg"
BEGIN
  LTEXT "קידוד:", -1, 5,0, 50,12
  COMBOBOX IDC_OFN_ENCCOMBO, 53,0, 156,48, WS_CHILD | WS_VSCROLL | CBS_DROPDOWNLIST
END

STRINGTABLE
{
STRING_PAGESETUP_HEADERVALUE,   "&ע"
STRING_PAGESETUP_FOOTERVALUE,   "עמוד &ת"

STRING_NOTEPAD,                                 "פנקס רשימות"
STRING_ERROR,                                   "שגיאה"
STRING_WARNING,                                 "אזהרה"
STRING_INFO,                                    "מידע"

STRING_UNTITLED,                                "ללא שם"

STRING_ALL_FILES,                               "כל הקבצים (*.*)"
STRING_TEXT_FILES_TXT,                  "קובצי טקסט (*.txt)"

STRING_TOOLARGE,                                "הקובץ '%s' גדול מדי עבור פנקס רשימות.\n\
נא להשתמש בעורך אחר."
STRING_NOTEXT,                                  "לא הוזן טקסט כלל.\
\nיש לכתוב משהו ולנסות שוב"
STRING_DOESNOTEXIST,                            "הקובץ '%s' אינו קיים.\n\n\
האם ברצונך ליצור קובץ חדש?"
STRING_NOTSAVED,                                "הקובץ '%s' השתנה.\n\n\
האם ברצונך לשמור את השינויים?"
STRING_NOTFOUND,                                        "'%s' לא נמצא."
STRING_OUT_OF_MEMORY,                   "אין די זיכרון כדי להשלים \
משימה זו.\nנא לסגור יישום אחד או יותר כדי להגדיל את כמות הזיכרון החופשית."

STRING_UNICODE_LE,     "יוניקוד (UTF-16)"
STRING_UNICODE_BE,     "יוניקוד (UTF-16 big-endian)"

STRING_LOSS_OF_UNICODE_CHARACTERS,         "%s\n\
הקובץ מכיל תווי יוניקוד שעלולים ללכת לאיבוד אם קובץ זה\n\
יישמר עם הקידוד %s.\n\
כדי לשמור על תווים אלו, יש ללחוץ על ביטול, ואז לבחור\n\
באחת מאפשרויות היוניקוד ברשימה הנגללת של הקידודים.\n\
האם להמשיך?"
}
