/*
 * Copyright 2009 André Hentschel
 *
 * 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"

#pragma code_page(65001)

LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL

STRINGTABLE DISCARDABLE
{
    IDS_TO_PRIMITIVE        "Fehler beim umwandeln des Objektes in einen Grundtyp"
    IDS_INVALID_CALL_ARG    "Ungültiger Funktionsaufruf oder Argument"
    IDS_CREATE_OBJ_ERROR    "Automatisierungsserver konnte das Objekt nicht erstellen"
    IDS_NO_PROPERTY         "Das Objekt unterstützt diese Eigenschaft oder Methode nicht"
    IDS_ARG_NOT_OPT         "Argument nicht optional"
    IDS_SYNTAX_ERROR        "Syntax Fehler"
    IDS_SEMICOLON           "';' erwartet"
    IDS_LBRACKET            "'(' erwartet"
    IDS_RBRACKET            "')' erwartet"
    IDS_UNTERMINATED_STR    "konstante Zeichenkette nicht terminiert"
    IDS_NOT_FUNC            "Funktion erwartet"
    IDS_NOT_DATE            "'[Objekt]' ist kein Datums-Objekt"
    IDS_NOT_NUM             "Nummer erwartet"
    IDS_OBJECT_EXPECTED     "Objekt erwartet"
    IDS_ILLEGAL_ASSIGN      "Unzulässige Zuweisung"
    IDS_UNDEFINED           "'|' nicht definiert"
    IDS_NOT_BOOL            "Boolisches Objekt erwartet"
    IDS_JSCRIPT_EXPECTED    "JScript Objekt erwartet"
    IDS_REGEXP_SYNTAX_ERROR "Syntax Fehler in regulärem Ausdruck"
    IDS_URI_INVALID_CHAR    "Zu verschlüsselnde URI enthält ungültige Zeichen"
    IDS_INVALID_LENGTH      "Array-Größe muss eine endliche, positive Ganzzahl sein"
    IDS_ARRAY_EXPECTED      "Array Objekt erwartet"
}
