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

IDC_REGEDIT MENU DISCARDABLE
BEGIN
    POPUP "&Bestand"
    BEGIN
        MENUITEM "&Afsluiten",                  ID_REGISTRY_EXIT
    END
    POPUP "&Help"
    BEGIN
        MENUITEM "&Info ...",                   ID_HELP_ABOUT
    END
END

IDR_REGEDIT_MENU MENU DISCARDABLE
BEGIN
    POPUP "&Registerbestand"
    BEGIN
        MENUITEM "Registerbestand &importeren...",    ID_REGISTRY_IMPORTREGISTRYFILE
        MENUITEM "Registerbestand &exporteren...",    ID_REGISTRY_EXPORTREGISTRYFILE
        MENUITEM SEPARATOR
        MENUITEM "Verbinding &maken met netwerkregister...", ID_REGISTRY_CONNECTNETWORKREGISTRY, GRAYED
        MENUITEM "Verbinding &verbreken met netwerkregister...", ID_REGISTRY_DISCONNECTNETWORKREGISTRY, GRAYED
        MENUITEM SEPARATOR
        MENUITEM "Af&drukken\tCtrl+P",                ID_REGISTRY_PRINT, GRAYED
        MENUITEM SEPARATOR
        MENUITEM "&Afsluiten",                        ID_REGISTRY_EXIT
    END
    POPUP "&Bewerken"
    BEGIN
        MENUITEM "&Wijzigen",                         ID_EDIT_MODIFY
        MENUITEM SEPARATOR
        POPUP "&Nieuw"
        BEGIN
            MENUITEM "&Sleutel",                      ID_EDIT_NEW_KEY
            MENUITEM SEPARATOR
            MENUITEM "&Tekenreekswaarde",             ID_EDIT_NEW_STRINGVALUE
            MENUITEM "&Binaire waarde",               ID_EDIT_NEW_BINARYVALUE
            MENUITEM "&DWORD-waarde",                 ID_EDIT_NEW_DWORDVALUE
        END
        MENUITEM SEPARATOR
        MENUITEM "&Verwijderen\tDel",                 ID_EDIT_DELETE
        MENUITEM "&Naam wijzigen",                    ID_EDIT_RENAME
        MENUITEM SEPARATOR
        MENUITEM "&Sleutelnaam kopiëren",             ID_EDIT_COPYKEYNAME
        MENUITEM SEPARATOR
        MENUITEM "&Zoeken\tCtrl+F",                   ID_EDIT_FIND, GRAYED
        MENUITEM "Volgende Zoeken\tF3",               ID_EDIT_FINDNEXT, GRAYED
    END
    POPUP "Bee&ld"
    BEGIN
        MENUITEM "&Statusbalk",                       ID_VIEW_STATUSBAR
        MENUITEM SEPARATOR
        MENUITEM "S&plitsen",                         ID_VIEW_SPLIT
        MENUITEM SEPARATOR
        MENUITEM "&Vernieuwen\tF5",                   ID_VIEW_REFRESH
    END
    POPUP "&Favorieten"
    BEGIN
        MENUITEM "&Toevoegen aan favorieten",         ID_FAVOURITES_ADDTOFAVOURITES
        , GRAYED
        MENUITEM "&Verwijderen uit favorieten",       ID_FAVOURITES_REMOVEFAVOURITE
        , GRAYED
    END
    POPUP "&Help"
    BEGIN
        MENUITEM "&Help-onderwerpen",                 ID_HELP_HELPTOPICS
        MENUITEM SEPARATOR
        MENUITEM "&Info",      ID_HELP_ABOUT
    END
END


/*
 * Dialog
 */

IDD_ABOUTBOX DIALOG DISCARDABLE  22, 17, 230, 75
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Info"
FONT 8, "System"
BEGIN
    ICON            IDI_REGEDIT,IDI_REGEDIT,14,9,16,16
    LTEXT           "ReactOS regedit Version 1.0",IDC_STATIC,49,10,119,8,
                    SS_NOPREFIX
    LTEXT           "Copyright (C) 2002 ReactOS Team",IDC_STATIC,49,20,119,8
    DEFPUSHBUTTON   "OK",IDOK,195,6,30,11,WS_GROUP
END

/*
 * String Table
 */

STRINGTABLE DISCARDABLE
BEGIN
    IDS_LIST_COLUMN_NAME    "Naam"
    IDS_LIST_COLUMN_TYPE    "Type"
    IDS_LIST_COLUMN_DATA    "Gegevens"
END

STRINGTABLE DISCARDABLE
BEGIN
    IDS_APP_TITLE           "Register-editor"
    IDC_REGEDIT             "REGEDIT"
    IDC_REGEDIT_FRAME       "REGEDIT_FRAME"
END

STRINGTABLE DISCARDABLE
BEGIN
    ID_REGISTRY_MENU        "Opdrachten voor het werken met het gehele register"
    ID_EDIT_MENU            "Opdrachten voor het bewerken van waarden of sleutels"
    ID_VIEW_MENU            "Opdrachten voor het aanpassen van het registervenster"
    ID_FAVOURITES_MENU      "Opdrachten voor toegang tot vaak gebruikte sleutels"
    ID_HELP_MENU            "Opdrachten voor het weergeven van Help en informatie over de Register-editor"
    ID_EDIT_NEW_MENU        "Opdrachten voor het maken van nieuwe sleutels of waarden"
END

STRINGTABLE DISCARDABLE
BEGIN
    ID_EDIT_MODIFY          "De gegevens van de waarde wijzigen"
    ID_EDIT_NEW_KEY         "Een nieuwe sleutel toevoegen"
    ID_EDIT_NEW_STRINGVALUE "Een nieuwe tekenreekswaarde toevoegen"
    ID_EDIT_NEW_BINARYVALUE "Een nieuwe binaire waarde toevoegen"
    ID_EDIT_NEW_DWORDVALUE  "Een nieuwe DWORD-waarde toevoegen" 
    ID_REGISTRY_IMPORTREGISTRYFILE "Een tekstbestand in het register importeren"
    ID_REGISTRY_EXPORTREGISTRYFILE
                            "Het register of een gedeelte ervan naar een tekstbestand exporteren"
    ID_REGISTRY_CONNECTNETWORKREGISTRY
                            "Een verbinding maken met het register van een externe computer"
    ID_REGISTRY_DISCONNECTNETWORKREGISTRY
                            "De verbinding met het register van een externe computer verbreken"
    ID_REGISTRY_PRINT       "Het register of een gedeelte ervan afdrukken"
/*    ID_HELP_HELPTOPICS      "Help voor de Register-editor openen" */
    ID_HELP_ABOUT           "Programmagegevens, versienummer en copyrightgegevens weergeven"
END

STRINGTABLE DISCARDABLE
BEGIN
    ID_REGISTRY_EXIT        "De Register-editor afsluiten"
    ID_FAVOURITES_ADDTOFAVOURITES "Sleutels toevoegen aan de lijst met favorieten"
    ID_FAVOURITES_REMOVEFAVOURITE "Sleutels verwijderen uit de lijst met favorieten"
    ID_VIEW_STATUSBAR       "De statusbalk weergeven of verbergen"
    ID_VIEW_SPLIT           "De positie van de splitsing tussen twee deelvensters wijzigen"
    ID_VIEW_REFRESH         "Het venster vernieuwen"
    ID_EDIT_DELETE          "De selectie verwijderen"
    ID_EDIT_RENAME          "De naam van de selectie wijzigen"
    ID_EDIT_COPYKEYNAME     "De naam van de geselecteerde sleutel naar het Klembord kopiëren"
    ID_EDIT_FIND            "Een tekenreeks zoeken in een sleutel, een waarde of gegevens"
    ID_EDIT_FINDNEXT        "De opgegeven tekst nogmaals zoeken"
END

/*****************************************************************/


/*
 * Dialog
 */

IDD_DIALOG1 DIALOG DISCARDABLE  50, 50, 268, 98
STYLE DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |
    WS_BORDER
FONT 8, "MS Sans Serif"
BEGIN
END

IDD_DIALOG2 DIALOG DISCARDABLE  0, 0, 187, 95
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog"
FONT 8, "MS Sans Serif"
BEGIN
    DEFPUSHBUTTON   "OK",IDOK,130,7,50,14
    PUSHBUTTON      "Annuleren",IDCANCEL,130,24,50,14
END


/*
 * TEXTINCLUDE
 */

1 TEXTINCLUDE DISCARDABLE
BEGIN
    "resource.h\0"
END
