/*
 * 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 DISCARDABLE
{
    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_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"
}
