/*
 * 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_SUBSCRIPT_OUT_OF_RANGE "Sottoscript fuori portata"
    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_NOT_VBARRAY         "Richiesto un oggetto VBArray"
    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"
}
