###############################################################################
# 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: Die Pr\u00fcfung ist fehlgeschlagen, weil die Anwendungsclientdatei ung\u00fcltig ist. Pr\u00fcfen Sie, ob der Implementierungsdeskriptor g\u00fcltig ist.
#EXPLANATION None.
#USERACTION None.

ERROR_APPCLIENT_VALIDATION_FAILED=CHKJ1001E: Die Pr\u00fcfung ist fehlgeschlagen:
#EXPLANATION None.
#USERACTION None.

ERROR_EJB_REFS=CHKJ1002E: Nicht aufl\u00f6sbare EJB-Verweise in {0};
#EXPLANATION None.
#USERACTION None.

INVALID_DD=CHKJ1003E: Das Anwendungsclientprojekt enth\u00e4lt einen ung\u00fcltigen Implementierungsdeskriptor.
#EXPLANATION None.
#USERACTION None.

MESSAGE_APPCLIENT_MISSING_URI=CHKJ1004E: Die URI {0} stimmt mit keiner Angabe in der Anwendungsclientdatei \u00fcberein.
#EXPLANATION None.
#USERACTION None.

APPCLIENT_DD_PARSE_LINECOL=CHKJ1005E: Der Implementierungsdeskriptor konnte auf Grund eines unbekannten Syntaxfehlers nicht geladen werden. Der ung\u00fcltige Abschnitt beginnt bei Zeile {0}, Spalte {1}.
#EXPLANATION None.
#USERACTION None.

APPCLIENT_DD_PARSE_LINE=CHKJ1006E: Der Implementierungsdeskriptor konnte auf Grund eines unbekannten Syntaxfehlers nicht geladen werden. Der ung\u00fcltige Abschnitt beginnt bei Zeile {0}.
#EXPLANATION None.
#USERACTION None.

APPCLIENT_DD_PARSE_NOINFO=CHKJ1007E: Der Implementierungsdeskriptor konnte auf Grund eines unbekannten Syntaxfehlers nicht geladen werden. Der ung\u00fcltige Abschnitt konnte nicht identifiziert werden.
#EXPLANATION None.
#USERACTION None.

APPCLIENT_DD_CANNOT_OPEN_DD=CHKJ1008E: Die Pr\u00fcfung konnte nicht abgeschlossen werden, weil der Implementierungsdeskriptor nicht ge\u00f6ffnet werden kann.
#EXPLANATION None.
#USERACTION None.

APPCLIENT_DUP_RES_ENV_REF_ERROR_=IWAE0002E Die Datei application-client.xml enth\u00e4lt den doppelten Umgebungsverweis "{0}".
#EXPLANATION None.
#USERACTION None.

APPCLIENT_INVALID_DOC_TYPE_ERROR_=IWAE0003E Die Dokumenttypversion "{0}" f\u00fcr die Datei application-client.xml im Projekt "{1}" muss Version "{2}" sein.
#EXPLANATION None.
#USERACTION None.

APPCLIENT_DUP_EJB_REF_ERROR_=IWAE0004E Die Datei application-client.xml enth\u00e4lt den doppelten Enterprise-Bean-Verweis "{0}".
APPCLIENT_MAIN_CLASS_ERROR_=IWAE0035E Das Hauptklassenattribut muss im Anwendungsclientmodul definiert sein.
