/*
 * Copyright 2002 Michael Günnewig
 * 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 "avifile_private.h"

#pragma code_page(65001)

LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT

IDD_SAVEOPTIONS DIALOG  43, 37, 226, 82
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_LAYOUTRTL
CAPTION "אפשרויות דחיסה"
FONT 8, "MS Shell Dlg"
BEGIN
    LTEXT           "&בחירת תזרים:",-1,2,5,154,10
    COMBOBOX        IDC_STREAM,2,18,154,61,CBS_DROPDOWNLIST | WS_VSCROLL |
                    WS_TABSTOP
    PUSHBUTTON      "&אפשרויות...",IDC_OPTIONS,170,17,50,14
    AUTOCHECKBOX    "&קטיעה בכול",IDC_INTERLEAVE,3,42,85,11,WS_TABSTOP
    EDITTEXT        IDC_INTERLEAVEEVERY,91,41,32,12,ES_AUTOHSCROLL
    LTEXT           "שקופיות",-1,129,43,36,9
    LTEXT           "המבנה הנוכחי:",-1,3,56,73,9
    LTEXT           "שטח זה להשכרה",IDC_FORMATTEXT,75,56,90,26
    DEFPUSHBUTTON   "אישור",IDOK,170,42,50,14
    PUSHBUTTON      "ביטול",IDCANCEL,170,61,50,14
END

STRINGTABLE
{
  IDS_WAVESTREAMFORMAT	"Waveform: %s"
  IDS_WAVEFILETYPE	"Waveform"
  IDS_ALLMULTIMEDIA	"כל קובצי המולטימדיה"
  IDS_ALLFILES		"כל הקבצים (*.*)@*.*"
  IDS_VIDEO		"וידאו"
  IDS_AUDIO		"שמע"
  IDS_AVISTREAMFORMAT	"%s %s מס׳ %d"
  IDS_AVIFILETYPE	"Wine AVI-default-filehandler"
  IDS_UNCOMPRESSED      "ללא דחיסה"
}
