###############################################################################
# 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: La validaci\u00f3n ha fallado porque el archivo del cliente de aplicaciones no es v\u00e1lido. Aseg\u00farese de que el descriptor de despliegue es v\u00e1lido.
#EXPLANATION None.
#USERACTION None.

ERROR_APPCLIENT_VALIDATION_FAILED=CHKJ1001E: La validaci\u00f3n ha fallado:
#EXPLANATION None.
#USERACTION None.

ERROR_EJB_REFS=CHKJ1002E: Hay referencias a EJB que no pueden resolverse en {0};
#EXPLANATION None.
#USERACTION None.

INVALID_DD=CHKJ1003E: El proyecto de cliente de aplicaciones tiene un descriptor de despliegue no v\u00e1lido.
#EXPLANATION None.
#USERACTION None.

MESSAGE_APPCLIENT_MISSING_URI=CHKJ1004E: El URI {0} no coincide con nada del archivo del cliente de aplicaciones.
#EXPLANATION None.
#USERACTION None.

APPCLIENT_DD_PARSE_LINECOL=CHKJ1005E: No se ha podido cargar el descriptor de despliegue debido a un error de sintaxis desconocido. La secci\u00f3n err\u00f3nea empieza en la l\u00ednea {0}, columna {1}.
#EXPLANATION None.
#USERACTION None.

APPCLIENT_DD_PARSE_LINE=CHKJ1006E: No se ha podido cargar el descriptor de despliegue debido a un error de sintaxis desconocido. La secci\u00f3n err\u00f3nea empieza en la l\u00ednea {0}.
#EXPLANATION None.
#USERACTION None.

APPCLIENT_DD_PARSE_NOINFO=CHKJ1007E: No se ha podido cargar el descriptor de despliegue debido a un error de sintaxis desconocido. No hay informaci\u00f3n disponible que ayude a identificar la secci\u00f3n err\u00f3nea.
#EXPLANATION None.
#USERACTION None.

APPCLIENT_DD_CANNOT_OPEN_DD=CHKJ1008E: No se ha podido finalizar la validaci\u00f3n porque no se puede abrir el descriptor de despliegue.
#EXPLANATION None.
#USERACTION None.

APPCLIENT_DUP_RES_ENV_REF_ERROR_=IWAE0002E La referencia de entorno de recurso "{0}" est\u00e1 duplicada en el archivo application-client.xml.
#EXPLANATION None.
#USERACTION None.

APPCLIENT_INVALID_DOC_TYPE_ERROR_=IWAE0003E La versi\u00f3n de tipo de documento "{0}" del archivo application-client.xml del proyecto "{1}" tiene que ser de la versi\u00f3n "{2}".
#EXPLANATION None.
#USERACTION None.

APPCLIENT_DUP_EJB_REF_ERROR_=IWAE0004E La referencia de bean de empresa "{0}" est\u00e1 duplicada en el archivo application-client.xml.
APPCLIENT_MAIN_CLASS_ERROR_=IWAE0035E Hay que definir el atributo Main-Class en el m\u00f3dulo de cliente de aplicaciones.
