###############################################################################
# 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: Dans le module {1}, l''\u00e9l\u00e9ment "ejb-ref-name" de l''\u00e9l\u00e9ment ejb-ref {0} n''est pas valide.
#EXPLANATION None.
#USERACTION None.

# --------------------------------
ERROR_EAR_INVALID_EREFTYPE=CHKJ3010E: Dans le module {1}, l''\u00e9l\u00e9ment "ejb-ref-type" de l''\u00e9l\u00e9ment ejb-ref {0} n''est pas valide.
#EXPLANATION None.
#USERACTION None.

ERROR_EAR_MISSING_EREFTYPE=CHKJ3014E: Dans le module {1}, l''\u00e9l\u00e9ment "ejb-ref-type" de l''\u00e9l\u00e9ment ejb-ref {0} est manquant.


# --------------------------------
ERROR_EAR_MISSING_EREFHOME=CHKJ3011E: Dans le module {1}, l''interface home ne se trouve pas dans l''\u00e9l\u00e9ment ejb-ref {0}.
#EXPLANATION None.
#USERACTION None.

# --------------------------------
ERROR_EAR_MISSING_EREFREMOTE=CHKJ3012E: Dans le module {1}, l''interface \u00e9loign\u00e9e ne se trouve pas dans l''\u00e9l\u00e9ment ejb-ref {0}.
#EXPLANATION None.
#USERACTION None.

# --------------------------------
ERROR_EAR_MISSING_EJB_ROLE=CHKJ2827W: L''\u00e9l\u00e9ment security-role-ref {0} d\u00e9finit l''\u00e9l\u00e9ment role-link, mais il n''y a pas d''\u00e9l\u00e9ment security-role dans le descripteur de l''application.
#EXPLANATION None.
#USERACTION None.

# --------------------------------
ERROR_EAR_DUPLICATE_RESREF=CHKJ3013E: El\u00e9ment resource-ref appel\u00e9 {0} en double.
#EXPLANATION None.
#USERACTION None.

# new string added for version 5 WSAD
UNRESOLVED_EJB_REF_WARN_=IWAE0034W L''\u00e9l\u00e9ment de lien d''EJB {0} ne peut pas \u00eatre r\u00e9solu dans le module {1} et l''EAR {2}.

ERROR_EAR_DUPLICATE_SERVICEREF=CHKJ3015E: El\u00e9ment service-ref appel\u00e9 {0} en double.
ERROR_EAR_DUPLICATE_SECURITYROLEREF=CHKJ3016E: El\u00e9ment "security role-ref" appel\u00e9 {0} en double.
ERROR_EAR_DUPLICATE_EJBREF=CHKJ3017E: El\u00e9ment ejb-ref appel\u00e9 {0} en double.
ERROR_EAR_DUPLICATE_RESENVREF=CHKJ3018E: El\u00e9ment "resource environment-ref" appel\u00e9 {0} en double.
ERROR_EAR_DUPLICATE_MESSSAGEDESTINATIONREF=CHKJ3019E: El\u00e9ment "message destination-ref" appel\u00e9 {0} en double.




