###############################################################################
# Copyright (c) 2001, 2004 IBM Corporation and others.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
# 
# Contributors:
# IBM Corporation - initial API and implementation
###############################################################################
# This properties file holds all the externalized strings for the Application Client project
#
# :Begin: WebSphere Quality Validation Information :Begin:
#COMPONENTPREFIX CHKJ
#COMPONENTNAMEFOR CHKJ IBM WebSphere Validation
#CMVCPATHNAME ncf/src/java/com/ibm/websphere/validation/applicationclientvalidation.properties
# :End: WebSphere Quality Validation Information :End:


ERROR_APPLICATIONCLIENT_INVALID_APPCLIENT_FILE=CHKJ1000E: convalida non riuscita. Il file Client di applicazioni non \u00e8 valido. Verificare che il descrittore di distribuzione sia valido.
#EXPLANATION None.
#USERACTION None.

ERROR_APPCLIENT_VALIDATION_FAILED=CHKJ1001E: convalida non riuscita:
#EXPLANATION None.
#USERACTION None.

ERROR_EJB_REFS=CHKJ1002E: riferimenti EJB non risolvibili in {0};
#EXPLANATION None.
#USERACTION None.

INVALID_DD=CHKJ1003E: il progetto Client di applicazioni utilizza un descrittore di distribuzione non valido.
#EXPLANATION None.
#USERACTION None.

MESSAGE_APPCLIENT_MISSING_URI=CHKJ1004E: l''URI {0} non corrisponde ad alcun elemento nel file del Client di applicazioni.
#EXPLANATION None.
#USERACTION None.

APPCLIENT_DD_PARSE_LINECOL=CHKJ1005E: impossibile caricare il descrittore di distribuzione a causa di un errore di sintassi sconosciuta. La sezione problematica inizia alla riga {0}, colonna {1}.
#EXPLANATION None.
#USERACTION None.

APPCLIENT_DD_PARSE_LINE=CHKJ1006E: impossibile caricare il descrittore di distribuzione a causa di un errore di sintassi sconosciuta. La sezione problematica inizia alla riga {0}.
#EXPLANATION None.
#USERACTION None.

APPCLIENT_DD_PARSE_NOINFO=CHKJ1007E: impossibile caricare il descrittore di distribuzione a causa di un errore di sintassi sconosciuta. Non sono disponibili informazioni che consentano di identificare la sezione problematica.
#EXPLANATION None.
#USERACTION None.

APPCLIENT_DD_CANNOT_OPEN_DD=CHKJ1008E: impossibile completare la convalida. Il descrittore di distribuzione non pu\u00f2 essere aperto.
#EXPLANATION None.
#USERACTION None.

APPCLIENT_DUP_RES_ENV_REF_ERROR_=IWAE0002E Riferimento ambiente risorsa duplicato "{0}" in application-client.xml.
#EXPLANATION None.
#USERACTION None.

APPCLIENT_INVALID_DOC_TYPE_ERROR_=IWAE0003E La versione del tipo di documento "{0}" per application-client.xml nel progetto "{1}" deve essere in versione "{2}".
#EXPLANATION None.
#USERACTION None.

APPCLIENT_DUP_EJB_REF_ERROR_=IWAE0004E Riferimento al bean enterprise duplicato "{0}" nel file application-client.xml.
APPCLIENT_MAIN_CLASS_ERROR_=IWAE0035E L''attributo Classe principale deve essere definito nel modulo Client di applicazioni.
