/*
 * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL

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 Shell Dlg"
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"
}
