/*
 * Copyright 2009 Piotr Caban
 * Copyright 2010 Igor Paliychuk
 *
 * 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_UKRAINIAN, SUBLANG_DEFAULT

STRINGTABLE DISCARDABLE
{
    IDS_TO_PRIMITIVE        "Помилка конвертування об'єкту в примітивний тип"
    IDS_INVALID_CALL_ARG    "Невірний виклик процедури або аргумент"
    IDS_CREATE_OBJ_ERROR    "Сервер автоматизації не може створити об'єкт"
    IDS_NO_PROPERTY         "Об'єкт не підтримує цю властивість чи метод"
    IDS_ARG_NOT_OPT         "Відсутній обов'язковий аргумент"
    IDS_SYNTAX_ERROR        "Синтаксична помилка"
    IDS_SEMICOLON           "Очікується ';'"
    IDS_LBRACKET            "Очікується '('"
    IDS_RBRACKET            "Очікується ')'"
    IDS_UNTERMINATED_STR    "Незавершена рядкова константа"
    IDS_NOT_FUNC            "Очікується функція"
    IDS_NOT_DATE            "'[object]' не об'єкт типу date"
    IDS_NOT_NUM             "Очікується число"
    IDS_OBJECT_EXPECTED     "Очікується об'єкт"
    IDS_ILLEGAL_ASSIGN      "Невірне присвоєння"
    IDS_UNDEFINED           "'|' не визначено"
    IDS_NOT_BOOL            "Очікується об'єкт Boolean"
    IDS_JSCRIPT_EXPECTED    "Очікується об'єкт JScript"
    IDS_REGEXP_SYNTAX_ERROR "Синтаксична помилка в регулярному виразі"
    IDS_URI_INVALID_CHAR    "URI, що буде закодований, містить неприпустимі символи"
    IDS_INVALID_LENGTH      "Довжиною масиву повинне бути скінченне додатнє ціле число"
    IDS_ARRAY_EXPECTED      "Очікується об'єкт Array"
}
