/*
 * 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
 */

#include "avifile_private.h"

LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL

IDD_SAVEOPTIONS DIALOG  43, 37, 226, 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,154,10
    COMBOBOX        IDC_STREAM,2,18,154,61,CBS_DROPDOWNLIST | WS_VSCROLL |
                    WS_TABSTOP
    PUSHBUTTON      "&Opties...",IDC_OPTIONS,170,17,50,14
    AUTOCHECKBOX    "&Interleave alle",IDC_INTERLEAVE,3,42,85,11,WS_TABSTOP
    EDITTEXT        IDC_INTERLEAVEEVERY,91,41,32,12,ES_AUTOHSCROLL
    LTEXT           "frames",-1,129,43,36,9
    LTEXT           "Huidig formaat:",-1,3,56,73,9
    LTEXT           "This space for rent",IDC_FORMATTEXT,75,56,90,26
    DEFPUSHBUTTON   "OK",IDOK,170,42,50,14
    PUSHBUTTON      "Annuleren",IDCANCEL,170,61,50,14
END

STRINGTABLE
{
  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"
}
