/*
 * Copyright 2009 Piotr Caban
 * Copyright 2010 Luca Bennati
 *
 * 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_ITALIAN, SUBLANG_NEUTRAL

STRINGTABLE
{
    IDS_TO_PRIMITIVE        "Errore nel convertire un oggetto ad un tipo primitivo"
    IDS_INVALID_CALL_ARG    "Chiamata o argomento di procedura non valido"
    IDS_CREATE_OBJ_ERROR    "Il server di automazione non può creare l'oggetto"
    IDS_NO_PROPERTY         "L'oggetto non supporta questa proprietà o metodo"
    IDS_UNSUPPORTED_ACTION  "L'oggetto non supporta questa azione"
    IDS_ARG_NOT_OPT         "Argomento non opzionale"
    IDS_SYNTAX_ERROR        "Errore di sintassi"
    IDS_SEMICOLON           "Richiesto ';'"
    IDS_LBRACKET            "Richiesto '('"
    IDS_RBRACKET            "Richiesto ')'"
    IDS_UNTERMINATED_STR    "Costante stringa non terminata"
    IDS_NOT_FUNC            "Richiesta una funzione"
    IDS_NOT_DATE            "'[oggetto]' non è un oggetto data"
    IDS_NOT_NUM             "Richiesto un numero"
    IDS_OBJECT_EXPECTED     "Richiesto un oggetto"
    IDS_ILLEGAL_ASSIGN      "Assegnamento illegale"
    IDS_UNDEFINED           "'|' non è definito"
    IDS_NOT_BOOL            "Richiesto un oggetto Booleano"
    IDS_JSCRIPT_EXPECTED    "Richiesto un oggetto JScript"
    IDS_REGEXP_SYNTAX_ERROR "Errore di sintassi nell'espressione regolare"
    IDS_URI_INVALID_CHAR    "L'URI da codificare contiene caratteri non validi"
    IDS_INVALID_LENGTH      "La lunghezza dell'array deve essere un intero finito e positivo"
    IDS_ARRAY_EXPECTED      "Richiesto un oggetto array"
}
