###############################################################################
# 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 hold all the externalised strings for eTools J2EE Validation project
# Validation project
#
# Messages should be according to the format at:
#     http://hany.austin.ibm.com/messages/index.html
#
# Briefly:
#     MESSAGE_ID=<ComponentPrefix><MessageNumber><TypeCode>: <MessageText>
#
# The prefix for this component is:
#     CHKJ (IBM WebSphere Validation)
#
# Note the ": " that appears between the type code and the message text.
#
# :Begin: WebSphere Quality Validation Information :Begin:
#COMPONENTPREFIX CHKJ
#COMPONENTNAMEFOR CHKJ IBM WebSphere Validation
#CMVCPATHNAME ncf/src/java/com/ibm/websphere/validation/erefvalidation.properties
# :End: WebSphere Quality Validation Information :End:
#
# 14-October-2001:
#

# --------------------------------
ERROR_EAR_MISSING_EREFNAME=CHKJ3009E: En el m\u00f3dulo {1}, el elemento ''ejb-ref-name'' de ''ejb-ref'' {0} no es v\u00e1lido.
#EXPLANATION None.
#USERACTION None.

# --------------------------------
ERROR_EAR_INVALID_EREFTYPE=CHKJ3010E: En el m\u00f3dulo {1}, el elemento ''ejb-ref-type'' de ''ejb-ref'' {0} no es v\u00e1lido.
#EXPLANATION None.
#USERACTION None.

ERROR_EAR_MISSING_EREFTYPE=CHKJ3014E: En el m\u00f3dulo {1}, falta el elemento ''ejb-ref-type'' de ejb-ref: {0}.


# --------------------------------
ERROR_EAR_MISSING_EREFHOME=CHKJ3011E: En el m\u00f3dulo {1}, falta la interfaz inicial del elemento ''ejb-ref''{0}.
#EXPLANATION None.
#USERACTION None.

# --------------------------------
ERROR_EAR_MISSING_EREFREMOTE=CHKJ3012E: En el m\u00f3dulo {1}, falta la interfaz remota del elemento ''ejb-ref''{0}.
#EXPLANATION None.
#USERACTION None.

# --------------------------------
ERROR_EAR_MISSING_EJB_ROLE=CHKJ2827W: El elemento ''security-role-ref'' {0} define el elemento ''role-link'' pero no hay elementos ''security-role'' en la descripci\u00f3n de la aplicaci\u00f3n.
#EXPLANATION None.
#USERACTION None.

# --------------------------------
ERROR_EAR_DUPLICATE_RESREF=CHKJ3013E: Hay un elemento ''resource-ref'' duplicado denominado {0}.
#EXPLANATION None.
#USERACTION None.

# new string added for version 5 WSAD
UNRESOLVED_EJB_REF_WARN_=IWAE0034W El elemento de enlace EJB {0} no puede resolverse en el m\u00f3dulo {1} y en el EAR {2}.

ERROR_EAR_DUPLICATE_SERVICEREF=CHKJ3015E: Hay un elemento ''service-ref'' duplicado denominado {0}.
ERROR_EAR_DUPLICATE_SECURITYROLEREF=CHKJ3016E: Hay un elemento ''security role-ref'' duplicado llamado {0}.
ERROR_EAR_DUPLICATE_EJBREF=CHKJ3017E: Hay un elemento ''ejb-ref'' duplicado denominado {0}.
ERROR_EAR_DUPLICATE_RESENVREF=CHKJ3018E: Hay un elemento ''resource environment-ref'' duplicado llamado {0}.
ERROR_EAR_DUPLICATE_MESSSAGEDESTINATIONREF=CHKJ3019E: Hay un elemento ''message destination-ref'' duplicado llamado {0}.




