/*
 * Copyright 2009 Paul Vriens
 *
 * 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 "resource.h"

LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL

#pragma code_page(65001)

STRINGTABLE DISCARDABLE
{
    IDS_TO_PRIMITIVE        "Fout bij het omzetten van het object naar een primitief type"
    IDS_INVALID_CALL_ARG    "Ongeldige procedure-aanroep of argument"
    IDS_CREATE_OBJ_ERROR    "Automatiseringsserver kan het object niet creëren"
    IDS_NO_PROPERTY         "Dit object ondersteunt deze eigenschap of methode niet"
    IDS_ARG_NOT_OPT         "Argument is niet optioneel"
    IDS_SYNTAX_ERROR        "Syntax fout"
    IDS_SEMICOLON           "';' verwacht"
    IDS_LBRACKET            "'(' verwacht"
    IDS_RBRACKET            "')' verwacht"
    IDS_UNTERMINATED_STR    "Onafgesloten tekenreeksconstante"
    IDS_NOT_FUNC            "Functie verwacht"
    IDS_NOT_DATE            "'[object]' is geen datum object"
    IDS_NOT_NUM             "Getal verwacht"
    IDS_OBJECT_EXPECTED     "Object verwacht"
    IDS_ILLEGAL_ASSIGN      "Ongeldige toekenning"
    IDS_UNDEFINED           "'|' is ongedefinieerd"
    IDS_NOT_BOOL            "Boolean object verwacht"
    IDS_JSCRIPT_EXPECTED    "JScript object verwacht"
    IDS_REGEXP_SYNTAX_ERROR "Syntax fout in reguliere expressie"
    IDS_URI_INVALID_CHAR    "De te coderen URI bevat ongeldige tekens"
    IDS_INVALID_LENGTH      "Array lengte moet een eindig, positief geheel getal zijn"
    IDS_ARRAY_EXPECTED      "Array object verwacht"
}
