/*
 * Dutch resources for oleacc
 *
 * Copyright 2008 Frans Kool
 *
 * 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 "oleacc.h"

LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL

STRINGTABLE DISCARDABLE
{
    0 "onbekend object" /* undocumented */
    ROLE_SYSTEM_TITLEBAR    "titel balk"
    ROLE_SYSTEM_MENUBAR     "menu balk"
    ROLE_SYSTEM_SCROLLBAR   "scroll balk"
    ROLE_SYSTEM_GRIP        "handvat"
    ROLE_SYSTEM_SOUND       "geluid"
    ROLE_SYSTEM_CURSOR      "cursor"
    ROLE_SYSTEM_CARET       "tekst cursor"
    ROLE_SYSTEM_ALERT       "alarm"
    ROLE_SYSTEM_WINDOW      "venster"
    ROLE_SYSTEM_CLIENT      "client"
    ROLE_SYSTEM_MENUPOPUP   "popup menu"
    ROLE_SYSTEM_MENUITEM    "menu item"
    ROLE_SYSTEM_TOOLTIP     "tool tip"
    ROLE_SYSTEM_APPLICATION "programma"
    ROLE_SYSTEM_DOCUMENT    "document"
    ROLE_SYSTEM_PANE        "sectie"
    ROLE_SYSTEM_CHART       "diagram"
    ROLE_SYSTEM_DIALOG      "keuze"
    ROLE_SYSTEM_BORDER      "randen"
    ROLE_SYSTEM_GROUPING    "groepering"
    ROLE_SYSTEM_SEPARATOR   "separator"
    ROLE_SYSTEM_TOOLBAR     "knoppen balk"
    ROLE_SYSTEM_STATUSBAR   "status balk"
    ROLE_SYSTEM_TABLE        "tabel"
    ROLE_SYSTEM_COLUMNHEADER "kolom hoofd"
    ROLE_SYSTEM_ROWHEADER    "rij hoofd"
    ROLE_SYSTEM_COLUMN       "kolom"
    ROLE_SYSTEM_ROW          "rij"
    ROLE_SYSTEM_CELL         "cel"
    ROLE_SYSTEM_LINK         "link"
    ROLE_SYSTEM_HELPBALLOON  "help ballon"
    ROLE_SYSTEM_CHARACTER    "karakter"
    ROLE_SYSTEM_LIST         "lijst"
    ROLE_SYSTEM_LISTITEM     "lijst onderdeel"
    ROLE_SYSTEM_OUTLINE      "outline"
    ROLE_SYSTEM_OUTLINEITEM  "outline onderdeel"
    ROLE_SYSTEM_PAGETAB      "pagina tab"
    ROLE_SYSTEM_PROPERTYPAGE "eigenschappen pagina"
    ROLE_SYSTEM_INDICATOR    "indicator"
    ROLE_SYSTEM_GRAPHIC      "grafisch"
    ROLE_SYSTEM_STATICTEXT   "vaste tekst"
    ROLE_SYSTEM_TEXT         "tekst"
    ROLE_SYSTEM_PUSHBUTTON   "drukknop"
    ROLE_SYSTEM_CHECKBUTTON  "aankruisvakje"
    ROLE_SYSTEM_RADIOBUTTON  "radioknop"
    ROLE_SYSTEM_COMBOBOX     "combo box"
    ROLE_SYSTEM_DROPLIST     "selectie box"
    ROLE_SYSTEM_PROGRESSBAR  "voortgangsbalk"
    ROLE_SYSTEM_DIAL         "draaiknop"
    ROLE_SYSTEM_HOTKEYFIELD  "hotkey veld"
    ROLE_SYSTEM_SLIDER       "schuifknop"
    ROLE_SYSTEM_SPINBUTTON   "spin box"
    ROLE_SYSTEM_DIAGRAM      "diagram"
    ROLE_SYSTEM_ANIMATION    "animatie"
    ROLE_SYSTEM_EQUATION     "formule"
    ROLE_SYSTEM_BUTTONDROPDOWN "dropdown knop"
    ROLE_SYSTEM_BUTTONMENU   "menu knop"
    ROLE_SYSTEM_BUTTONDROPDOWNGRID "dropdown grid knop"
    ROLE_SYSTEM_WHITESPACE   "lege ruimte"
    ROLE_SYSTEM_PAGETABLIST  "pagina tab lijst"
    ROLE_SYSTEM_CLOCK        "klok"
    ROLE_SYSTEM_SPLITBUTTON  "splits knop"
    ROLE_SYSTEM_IPADDRESS    "IP adres"
    ROLE_SYSTEM_OUTLINEBUTTON "outline knop"
}
