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

/* Menu */

IDM_WINEFILE MENU FIXED IMPURE
{
	POPUP "&Bestand"  {
		MENUITEM "&Openen\tEnter" ,               101
		MENUITEM "&Verplaatsen...\tF7" ,          106
		MENUITEM "&Kopiëren...\tF8" ,             107
		MENUITEM "Naar &klembord...\tF9" ,        118
		MENUITEM "Ver&wijderen\tDel" ,            108
		MENUITEM "&Naam wijzigen..." ,            109
		MENUITEM "&Eigenschappen...\tAlt+Enter" , ID_EDIT_PROPERTIES
		MENUITEM SEPARATOR
		MENUITEM "&Comprimeren..." ,              119
		MENUITEM "&Dec&omprimeren..." ,           120
		MENUITEM SEPARATOR
		MENUITEM "&Starten..." ,                  ID_EXECUTE
		MENUITEM "Af&drukken..." ,                102
		MENUITEM "Koppelen..." ,                  103
		MENUITEM SEPARATOR
		MENUITEM "Nieuwe &map..." ,               111
		MENUITEM "&Zoeken..." ,                   104
		MENUITEM "Bestanden &selecteren..." ,     116
		MENUITEM SEPARATOR
#ifndef _NO_EXTENSIONS
		MENUITEM "A&fsluiten\tAlt+X" ,            ID_FILE_EXIT
#else
		MENUITEM "A&fsluiten",                    ID_FILE_EXIT
#endif
	}

	POPUP "&Disk"  {
		MENUITEM "Disk &kopiëren..." ,          201
		MENUITEM "Disklabel maken..." ,			202
		MENUITEM SEPARATOR
		MENUITEM "Disk &formatteren..." ,       203
#ifdef _WIN95
		MENUITEM "Systeemdisk maken...", -1	/*@@ */
#endif
		MENUITEM SEPARATOR
		MENUITEM "Verbinding &maken met netwerkchijf"  ,     252
		MENUITEM "Verbinding &verbreken met netwerkschijf" , 253
		MENUITEM SEPARATOR
		MENUITEM "Schijf &delen..." ,         254
		MENUITEM "Delen &ongedaan maken..." , 255
		MENUITEM SEPARATOR
		MENUITEM "Schijf &selecteren..." ,    251
	}

	POPUP "&Mappen"  {
		MENUITEM "&Volgende niveau\t+" ,       301
		MENUITEM "&Uitklappen\t*" ,            302
		MENUITEM "&Alles uitklappen\tCtrl+*" , 303
		MENUITEM "&Inklappen\t-" ,             304
		MENUITEM SEPARATOR
		MENUITEM "&Markeer mappen" ,           505
	}

	POPUP "&Beeld"  {
		MENUITEM "&Hierarchie en mapinhoud" ,  413
		MENUITEM "&Alleen hierarchie" ,        411
		MENUITEM "Alleen &mapinhoud" ,         412
		MENUITEM SEPARATOR
		MENUITEM "Sp&litsen" ,                 414
		MENUITEM SEPARATOR
		MENUITEM "&Naam" ,                     ID_VIEW_NAME
		MENUITEM "&Alle details" ,             ID_VIEW_ALL_ATTRIBUTES, CHECKED
		MENUITEM "&Gedeeltelijke details..." , ID_VIEW_SELECTED_ATTRIBUTES
		MENUITEM SEPARATOR
		MENUITEM "Sorteer op &naam" ,    404
		MENUITEM "Sorteer op &type" ,    405
		MENUITEM "Sorteer op &grootte" , 406
		MENUITEM "Sorteer op &datum" ,   407
		MENUITEM SEPARATOR
		MENUITEM "Sorteer op &..." ,     409
	}

	POPUP "&Opties"  {
		MENUITEM "&Bevestiging..." , -1
		MENUITEM "&Lettertype..." ,  -1
		MENUITEM "Gereedschappenbalk &aanpassen..." , -1
		MENUITEM SEPARATOR
		MENUITEM "&Gereedschappenbalk" , ID_VIEW_TOOL_BAR, CHECKED
		MENUITEM "&Schijvenbalk" ,       ID_VIEW_DRIVE_BAR, CHECKED
		MENUITEM "S&tatusbalk" ,         ID_VIEW_STATUSBAR, CHECKED
#ifndef _NO_EXTENSIONS
		MENUITEM "&Volledig scherm\tCtrl+Shift+S" , ID_VIEW_FULLSCREEN
#endif
		MENUITEM SEPARATOR
		MENUITEM "Ge&minimaliseerd starten" , -1
		MENUITEM "&Instellingen opslaan bij afsluiten" , 511
	}


	POPUP "&Beveiliging"  {
		MENUITEM "&Toegang..." ,  605
		MENUITEM "&Loggen..." ,   606
		MENUITEM "&Eigenaar..." , 607
	}

	POPUP "&Venster"  {
		MENUITEM "Nieuw &venster" ,         ID_WINDOW_NEW
		MENUITEM "Trapsgewijs\tCtrl+F5" ,   ID_WINDOW_CASCADE
		MENUITEM "&Boven elkaar" ,          ID_WINDOW_TILE_HORZ
		MENUITEM "&Naast elkaar\tCtrl+F4" , ID_WINDOW_TILE_VERT
#ifndef _NO_EXTENSIONS
		MENUITEM "Automatisch schikken" ,   ID_WINDOW_AUTOSORT
#endif
		MENUITEM "&Pictogrammen schikken" , ID_WINDOW_ARRANGE
		MENUITEM "&Vernieuwen\tF5" ,        ID_REFRESH
	}

	POPUP "&?"  {
		MENUITEM "&Help-onderwerpen\tF1" , ID_HELP
		MENUITEM "&Zoeken...\tF1" ,        ID_HELP
		MENUITEM "&Instructie\tF1" ,       ID_HELP_USING
		MENUITEM SEPARATOR
		POPUP "Info..."  {
		  MENUITEM "Over &Wine..." ,       ID_ABOUT_WINE
/*
 *		  MENUITEM "&Licentie..."          ID_LICENSE
 *		  MENUITEM "&GEEN GARANTIE"        ID_NO_WARRANTY
 */
		}
	}
}


IDD_EXECUTE DIALOG FIXED IMPURE 15, 13, 210, 63
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Uitvoeren"
FONT 8, "MS Shell Dlg"
{
	CONTROL 		"", 101, "Static", SS_SIMPLE|SS_NOPREFIX, 3, 6, 162, 10
	CONTROL 		"&Opdracht:" , -1, "Static", SS_LEFTNOWORDWRAP|WS_GROUP, 3, 18, 60, 10
	EDITTEXT		201, 3, 29, 134, 12, ES_AUTOHSCROLL
	CONTROL 		"Als &pictogram" , 214, "Button", BS_AUTOCHECKBOX|WS_TABSTOP,3, 45, 71, 12
	DEFPUSHBUTTON	"OK" , 1, 158, 6, 47, 14
	PUSHBUTTON		"Annuleren" , 2, 158, 23, 47, 14
	PUSHBUTTON		"&Help" , 254, 158, 43, 47, 14
}
