/*
 * Copyright 2010 Andras Kovacs
 *
 * 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"

/* UTF-8 */
#pragma code_page(65001)

LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT

STRINGTABLE DISCARDABLE
{
    IDS_TO_PRIMITIVE        "Hiba az objektum primitív típusra való konvertálásánál"
    IDS_INVALID_CALL_ARG    "Érvénytelen eljáráshívás vagy argmentum"
    IDS_CREATE_OBJ_ERROR    "Az automatizáló (automation) kiszolgáló nem tud objektumot létrehozni"
    IDS_NO_PROPERTY         "Az objektum nem támogatja ezt a tulajdonságot vagy metódust"
    IDS_ARG_NOT_OPT         "Az argumentum nem opcionális"
    IDS_SYNTAX_ERROR        "Szinttaktikai hiba"
    IDS_SEMICOLON           "Hiányzó ';'"
    IDS_LBRACKET            "Hiányzó '('"
    IDS_RBRACKET            "Hiányzó ')'"
    IDS_UNTERMINATED_STR    "Lezáratlan sztring konstans"
    IDS_NOT_FUNC            "Függvényt vártam"
    IDS_NOT_DATE            "'Az [object]' nem egy date (dátum) objektum"
    IDS_NOT_NUM             "Számot vártam"
    IDS_OBJECT_EXPECTED     "Objektumot vártam"
    IDS_ILLEGAL_ASSIGN      "Nem megengedett összerendelés"
    IDS_UNDEFINED           "A '|' nem definiált"
    IDS_NOT_BOOL            "Boolean (igaz-hamis) objektumot vártam"
    IDS_JSCRIPT_EXPECTED    "JScript objektumot vártam"
    IDS_REGEXP_SYNTAX_ERROR "Szinttaktikai hiba a reguláris kifejezésben"
    IDS_URI_INVALID_CHAR    "A kódolandó URI érvénytelen karaktereket tartalmaz"
    IDS_INVALID_LENGTH      "A tömb hosszának egy véges pozitív egész számnak kell lennie"
    IDS_ARRAY_EXPECTED      "Tömb objektumot vártam"
}
