/*
 * avifile (Dutch resources)
 *
 * Copyright 2003 Hans Leidekker
 *
 * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

LANGUAGE LANG_DUTCH, SUBLANG_DEFAULT

IDD_SAVEOPTIONS DIALOG FIXED IMPURE  43, 37, 196, 82
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Compressie-instellingen"
FONT 8, "MS Sans Serif"
BEGIN
    LTEXT           "&Kies een invoerbestand:",-1,2,5,114,10
    COMBOBOX        IDC_STREAM,2,18,134,61,CBS_DROPDOWNLIST | WS_VSCROLL | 
                    WS_TABSTOP
    PUSHBUTTON      "&Opties...",IDC_OPTIONS,145,17,45,14
    AUTOCHECKBOX    "&Interleave alle",IDC_INTERLEAVE,3,42,60,11,WS_TABSTOP
    EDITTEXT        IDC_INTERLEAVEEVERY,66,41,32,12,ES_AUTOHSCROLL
    LTEXT           "Losse frames",-1,104,43,36,9
    LTEXT           "Huidig formaat:",-1,3,56,53,9
    LTEXT           "This space for rent",IDC_FORMATTEXT,55,56,90,26
    DEFPUSHBUTTON   "OK",IDOK,145,42,45,14
    PUSHBUTTON      "Annuleren",IDCANCEL,145,61,45,14
END

STRINGTABLE DISCARDABLE
{
  IDS_WAVESTREAMFORMAT	"Waveform: %s"
  IDS_WAVEFILETYPE	"Waveform"
  IDS_ALLMULTIMEDIA	"Alle multimediabestanden"
  IDS_ALLFILES		"Alle bestanden (*.*)@*.*"
  IDS_VIDEO		"video"
  IDS_AUDIO		"audio"
  IDS_AVISTREAMFORMAT	"%s %s #%d"
  IDS_AVIFILETYPE	"Wine AVI-standaard-bestandskoppeling"
  IDS_UNCOMPRESSED      "ongecomprimeerd"
}
