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

MAIN_MENU MENU
{
 POPUP "&Bestand" {
  MENUITEM "&Nieuw...",		     CMD_NEW
  MENUITEM "&Openen\tCtrl+O",	     CMD_OPEN
  MENUITEM "O&pslaan\tCtrl+p",	     CMD_SAVE
  MENUITEM "Ops&laan als...",	     CMD_SAVE_AS
  MENUITEM SEPARATOR
  MENUITEM "&Afdrukken",	     CMD_PRINT
  MENUITEM "Pagina-in&stelling...",  CMD_PAGE_SETUP
  MENUITEM "Printerinstellingen...", CMD_PRINTER_SETUP
  MENUITEM SEPARATOR
  MENUITEM "&Afsluiten",             CMD_EXIT
 }
POPUP "Be&werken" {
  MENUITEM "&Ongedaan maken\tCtrl+Z",    CMD_UNDO
  MENUITEM SEPARATOR
  MENUITEM "K&nippen\tCtrl+X",           CMD_CUT
  MENUITEM "&Kopiëren\tCtrl+C",         CMD_COPY
  MENUITEM "&Plakken\tCtrl+V",           CMD_PASTE
  MENUITEM "&Verwijderen\tDel",          CMD_DELETE
  MENUITEM SEPARATOR
  MENUITEM "&Alles selecteren\tCtrl+A",  CMD_SELECT_ALL
  MENUITEM "Tijd/&datum\tF5",            CMD_TIME_DATE
  MENUITEM SEPARATOR
  MENUITEM "A&utomatische terugloop",    CMD_WRAP
  MENUITEM "&Lettertype instellen...",   CMD_FONT
 }
POPUP "&Zoeken" {
  MENUITEM "&Zoeken\tCtrl+Z",       CMD_SEARCH
  MENUITEM "&Volgende zoeken\tF3",  CMD_SEARCH_NEXT
 }
POPUP "&Help" {
  MENUITEM "&Help-onderwerpen",  CMD_HELP_CONTENTS
  MENUITEM "&Zoeken...",         CMD_HELP_SEARCH
  MENUITEM "&Hulp bij Help",     CMD_HELP_ON_HELP
  MENUITEM SEPARATOR
  POPUP "Inf&o..." {
   MENUITEM "&Licentie",         CMD_LICENSE
   MENUITEM "&GEEN GARANTIE",    CMD_NO_WARRANTY
   MENUITEM "&Over Wine",        CMD_ABOUT_WINE
  }
 }
}

/* Dialog `Page setup' */

DIALOG_PAGESETUP DIALOG 0, 0, 225, 95
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
FONT 8, "Helv"
CAPTION "Pagina-instelling"
{
LTEXT    "&Koptekst:",  0x140,   10, 07, 40, 15
EDITTEXT                         0x141,       60, 05,110, 12, WS_BORDER | WS_TABSTOP
LTEXT    "&Voettekst:",  0x142,   10, 24, 40, 15
EDITTEXT                         0x143,       60, 22,110, 12, WS_BORDER | WS_TABSTOP

GROUPBOX "&Marges:",      0x144,     10, 43,160, 45
LTEXT    "Li&nks:",        0x145,   20, 55, 30, 10, WS_CHILD
EDITTEXT /*STRING_PAGESETUP_LEFTVALUE,*/   0x147,       50, 55, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    "&Boven:",         0x148,    20, 73, 30, 10, WS_CHILD
EDITTEXT /*STRING_PAGESETUP_TOPVALUE,*/    0x14A,        50, 73, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    "&Rechts:",       0x14B, 100, 55, 30, 10, WS_CHILD
EDITTEXT /*STRING_PAGESETUP_RIGHTVALUE,*/  0x14D,     130, 55, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
LTEXT    "&Onder:",      0x14E,100, 73, 30, 10, WS_CHILD
EDITTEXT /*STRING_PAGESETUP_BOTTOMVALUE,*/ 0x150,    130, 73, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP

DEFPUSHBUTTON "OK",        0x151,               180,  3, 40, 15, WS_TABSTOP
PUSHBUTTON    "Annuleren", 0x152,               180, 21, 40, 15, WS_TABSTOP
PUSHBUTTON    "&Help",     0x153,               180, 39, 40, 15, WS_TABSTOP
}

STRINGTABLE DISCARDABLE
{
STRING_PAGESETUP_HEADERVALUE,   "&n"        /* FIXME */
STRING_PAGESETUP_FOOTERVALUE,   "Pagina &s"   /* FIXME */
STRING_PAGESETUP_LEFTVALUE,             "20 mm"     /* FIXME */
STRING_PAGESETUP_RIGHTVALUE,    "20 mm"     /* FIXME */
STRING_PAGESETUP_TOPVALUE,              "25 mm"     /* FIXME */
STRING_PAGESETUP_BOTTOMVALUE,   "25 mm"     /* FIXME */

STRING_NOTEPAD,                                 "Kladblok"
STRING_ERROR,                                   "FOUT"
STRING_WARNING,                                 "WAARSCHUWING"
STRING_INFO,                                    "Informatie"

STRING_UNTITLED,                                "(naamloos)"

STRING_ALL_FILES,                               "Alle bestanden (*.*)"
STRING_TEXT_FILES_TXT,                          "Tekstbestanden (*.txt)"

STRING_TOOLARGE,                                "Het bestand '%s' is te groot voor Kladblok.\n \
Gebruik een andere editor."
STRING_NOTEXT,                                  "U heeft geen tekst ingevoerd. \
\nType uw tekst en probeer het nogmaals"
STRING_DOESNOTEXIST,                            "Het bestand '%s'\nbestaat niet\n\n \
Wilt u een nieuw bestand maken?"
STRING_NOTSAVED,                                "Het bestand '%s'\nis gewijzigd\n\n \
Wilt u de wijzigingen opslaan?"
STRING_NOTFOUND,                                "'%s' kan niet worden gevonden."
STRING_OUT_OF_MEMORY,                           "Onvoldoende geheugen. \
\nSluit een of meer applicaties om de hoeveelheid \nbeschikbaar geheugen te vergroten."

}
