###############################################################################
# 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
###############################################################################

title=WSDL

# Nodes
NODE_NAME_WSDL_MAIN=WSDL - Haupt

# Frame titles
FRAME_TITLE_NAVIGATOR_CONTAINER=Navigator - Container
FRAME_TITLE_NAVIGATOR_TOOLBAR=Navigator - Symbolleiste
FRAME_TITLE_NAVIGATOR_CONTENT=Navigator - Inhalt
FRAME_TITLE_ACTIONS_CONTAINER=Aktionen - Container
FRAME_TITLE_PROPERTIES_CONTAINER=Eigenschaften - Container
FRAME_TITLE_PROPERTIES_TOOLBAR=Eigenschaften - Symbolleiste
FRAME_TITLE_PROPERTIES_CONTENT=Eigenschaften - Inhalt
FRAME_TITLE_STATUS_CONTAINER=Status - Container
FRAME_TITLE_STATUS_TOOLBAR=Status - Symbolleiste
FRAME_TITLE_STATUS_CONTENT=Status - Inhalt
FRAME_TITLE_WSDL_PERSPECTIVE_CONTENT=WSDL-Seite - Inhalt
FRAME_TITLE_XSD_INFORMATION_TOOLBAR=Symbolleiste des XSD-Informationsdialogs
FRAME_TITLE_XSD_INFORMATION_CONTENT=Inhalt des XSD-Informationsdialogs

# OpenWSDLAction
ALT_OPEN_WSDL=WSDL \u00f6ffnen
MSG_ERROR_INVALID_WSDL_URL=IWAB0378E Geben Sie eine g\u00fcltige WSDL-URL ein.
MSG_ERROR_OPEN_WSDL=IWAB0379E %1 kann nicht ge\u00f6ffnet werden.
MSG_ERROR_XSD_VALIDATION=IWAB0380E Beim Auswerten von XML-Schemas wurden Fehler festgestellt.
MSG_INFO_OPEN_WSDL_SUCCESSFUL=IWAB0381I %1 wurde erfolgreich ge\u00f6ffnet.

# WSDL Element details
ALT_WSDL_DETAILS=WSDL - Details
FORM_LABEL_WSDL_DETAILS_DESC=Nachstehend sind die Details f\u00fcr dieses WSDL-Dokument aufgef\u00fchrt. Klicken Sie einen Service oder ein Binding an, um dessen Details anzuzeigen.

# WSDL Service Element details
ALT_WSDL_SERVICE_DETAILS=WSDL-Service - Details
FORM_LABEL_SERVICE_DETAILS_DESC=Nachstehend sind die Details f\u00fcr dieses &lt;service&gt;-Element aufgef\u00fchrt. Klicken Sie ein Binding an, um dessen Operationen anzuzeigen.

# WSDL Binding Element details
ALT_WSDL_BINDING_DETAILS=WSDL-Binding - Details
FORM_LABEL_BINDING_DETAILS_DESC=Nachstehend sind die Details f\u00fcr dieses <strong>%1</strong>  &lt;binding&gt;-Element aufgef\u00fchrt. Klicken Sie eine Operation an, um die zugeh\u00f6rigen Parameter auszuf\u00fcllen und die Operation aufzurufen oder zus\u00e4tzliche Endpunkte anzugeben.

# InvokeWSDLOperationAction
ALT_INVOKE_WSDL_OPERATION=Eine WSDL-Operation aufrufen
MSG_ERROR_UNABLE_TO_CONNECT=IWAB0382E Es kann keine Verbindung zu %1 hergestellt werden.
MSG_ERROR_VALIDATING_PARAMETER=IWAB0383E Fehler beim Auswerten von %1

# WSDLAddToFavoritesAction
ALT_ADD_WSDL_TO_FAVORITES=WSDL zu Favoriten hinzuf\u00fcgen
MSG_ERROR_FAVORITES_ALREADY_EXISTS=IWAB0384E %1 ist bereits in den Favoriten vorhanden.
MSG_ERROR_ADD_TO_FAVORITES=IWAB0385E %1 konnte nicht zu den Favoriten hinzugef\u00fcgt werden.
MSG_INFO_ADD_TO_FAVORITES_SUCCESSFUL=IWAB0386I %1 wurde zu den Favoriten hinzugef\u00fcgt.
MSG_QUESTION_OVERWRITE_FAVORITES=Favorit bereits vorhanden.  \u00dcberschreiben?

# RefreshWSDLAction
MSG_INFO_REFRESH_WSDL_SUCCESSFUL=IWAB0387I %1 wurde aktualisiert.
MSG_QUESTION_REMOVE_WSDL_NODE=%1 kann nicht mehr aufgel\u00f6st werden.  Soll der Knoten gel\u00f6scht werden?

# UpdateWSDLBindingAction
MSG_INFO_UPDATE_WSDL_BINDING_SUCCESSFUL=IWAB0388I Die Endpunkte wurden erfolgreich aktualisiert.

# Form titles
FORM_TITLE_OPEN_WSDL=WSDL-Formular \u00f6ffnen
FORM_TITLE_WSDL_DETAILS=Formular f\u00fcr WSDL-Details
FORM_TITLE_WSDL_SERVICE_DETAILS=Formular f\u00fcr WSDL-Servicedetails
FORM_TITLE_WSDL_BINDING_DETAILS=Formular f\u00fcr WSDL-Bindingdetails
FORM_TITLE_INVOKE_WSDL_OPERATION=Formular f\u00fcr WSDL-Operation

# Form Labels
FORM_LABEL_OPEN_WSDL_DESC=Geben Sie die URL eines WSDL-Dokuments ein, und klicken Sie auf <strong>Los</strong>, um es zu durchsuchen.
FORM_LABEL_SERVICES=Services
FORM_LABEL_BINDINGS=Bindings
FORM_LABEL_OPERATIONS=Operationen
FORM_LABEL_BINDING_TYPE=Typ
FORM_LABEL_BINDING_TYPE_UNSUPPORTED=Nicht unterst\u00fctzt
FORM_LABEL_BINDING_TYPE_SOAP=SOAP
FORM_LABEL_BINDING_TYPE_HTTP_GET=HTTP GET
FORM_LABEL_BINDING_TYPE_HTTP_POST=HTTP POST
FORM_LABEL_NAME=Name
FORM_LABEL_DOCUMENTATION=Dokumentation
FORM_LABEL_ENDPOINT=Endpunkt
FORM_LABEL_INVOKE_WSDL_OPERATION_DESC=Geben Sie die Parameter dieser WSDL-Operation ein, und klicken Sie auf <strong>Los</Strong>, um die Operation aufzurufen.
FORM_LINK_ADD=Hinzuf\u00fcgen
FORM_LINK_REMOVE=Entfernen
FORM_LABEL_VALUES=Werte
FORM_LABEL_ENABLE_DISABLE_GROUP=Gruppe aktivieren/inaktivieren
FORM_LABEL_UNION_TYPE=Gesamtverkn\u00fcpfungstyp
FORM_LABEL_LANGUAGE=Sprache
FORM_LABEL_XSD_APPLICATION_INFORMATION=Anwendungsinformationen
FORM_LABEL_XSD_DOCUMENTATION=Dokumentation
FORM_LABEL_SOAP_REQUEST_ENVELOPE=SOAP-Rahmenanweisung f\u00fcr Anforderung
FORM_LABEL_SOAP_RESPONSE_ENVELOPE=SOAP-Rahmenanweisung f\u00fcr Antwort
FORM_LABEL_GROUP_ALL_ORDERING_MOVE_UP=Element nach oben verschieben
FORM_LABEL_GROUP_ALL_ORDERING_MOVE_DOWN=Element nach unten verschieben
FORM_LABEL_BASE_TYPE=Basistyp
FORM_LABEL_UNBOUNDED=Unbegrenzt
FORM_LABEL_LENGTH=L\u00e4nge
FORM_LABEL_LENGTH_VALUE=[%1..%2]
FORM_LABEL_PATTERN=Muster
FORM_LABEL_WHITESPACE=Leerzeichen
FORM_LABEL_RANGE_OF_VALUES=Wertebereich
FORM_LABEL_MIN_EXCLUSIVE=(%1..
FORM_LABEL_MIN_INCLUSIVE=[%1..
FORM_LABEL_MAX_EXCLUSIVE=%1)
FORM_LABEL_MAX_INCLUSIVE=%1]
FORM_LABEL_TOTAL_DIGITS=Gesamtsummenstellen
FORM_LABEL_FRACTION_DIGITS=Bruchteilstellen
FORM_LABEL_OCCURANCE=Vorkommen von
FORM_LABEL_UNION_MEMBERS=Union-Members
FORM_LABEL_LIST_ITEMS=Listeneintr\u00e4ge
FORM_LABEL_ELEMENTS=Elemente
FORM_LABEL_SOAP_ENC_ARRAYS=SOAP-Bereiche
FORM_LABEL_CONTENT=Inhalt
FORM_LABEL_ATOMIC_NAME_TYPE=%1 (%2):
FORM_LABEL_NULL=Null
FORM_LABEL_GROUP_NUMBER=Gruppe %1
FORM_LABEL_CHOICES=Auswahlm\u00f6glichkeiten
FORM_LABEL_NOTHING_TO_DISPLAY_IN_FORM_VIEW=Es gibt nichts zum Anzeigen in der Formularsicht.  Wechseln Sie bitte in die Quellensicht f\u00fcr die SOAP-Anforderung und -Antwort.
FORM_LABEL_SOAP_RESPONSE_FAILED_VALIDATION_IN_FORM_VIEW=Die SOAP-Antwort hat die Schemaauswertung nicht bestanden.  Wechseln Sie bitte zur Quellensicht f\u00fcr die SOAP-Antwort in XML-Format.
FORM_LABEL_END_POINTS=Endpunkte

# Source/Form views
FORM_LINK_FORM=Formular
ALT_SWITCH_TO_FORM_VIEW=Zur Formularsicht wechseln
FORM_LINK_SOURCE=Quelle
ALT_SWITCH_TO_SOURCE_VIEW=Zur Quellensicht wechseln
FORM_LABEL_FRAGMENT_SOAP_VIEW_CONTENT=SOAP-Hauptteil:
BUTTON_LABEL_LOAD=Laden
BUTTON_LABEL_SAVE_AS=Speichern als...
MSG_QUESTION_SYNC_VIEWS=Durch den Wechsel zur Formularsicht kann sich das Format des Quelleninhalts \u00e4ndern.  Wollen Sie die Verarbeitung fortsetzen?
MSG_QUESTION_SYNC_VIEWS_DESPITE_INVALID_SOURCE_CONTENT=Der Inhalt der Quellensicht hat die Schemaauswertung nicht bestanden.  Trotzdem synchronisieren?  (Der Inhalt der Quellensicht kann dadurch ge\u00e4ndert werden)

# Form control titles
FORM_CONTROL_TITLE_ENABLE_DISABLE_GROUP=Gruppe aktivieren/inaktivieren
FORM_CONTROL_TITLE_SELECT_ELEMENT_IN_GROUP=Element in Gruppe ausw\u00e4hlen
FORM_CONTROL_TITLE_SELECT_UNION_TYPE=Gesamtverkn\u00fcpfungstyp ausw\u00e4hlen
FORM_CONTROL_TITLE_SOAP_FILE=SOAP-Datendatei

# XSD Information Dialog
TITLE_XSD_INFORMATION_DIALOG=XSD-Informationsdialog

# Error messages
MSG_ERROR_NOTHING_SELECTED=IWAB0389E W\u00e4hlen Sie mindestens einen Eintrag aus.
MSG_ERROR_MAX_OCCURS_VIOLATION=IWAB0390E Maximales Vorkommen erreicht.
MSG_ERROR_MIN_OCCURS_VIOLATION=IWAB0391E Mindestvorkommen erreicht.
MSG_ERROR_CANNOT_MOVE_FIRST_ELEMENT_UP=IWAB0392E Das ausgew\u00e4hlte Element befindet sich bereits in der ersten Gruppe.
MSG_ERROR_CANNOT_MOVE_LAST_ELEMENT_DOWN=IWAB0393E Das ausgew\u00e4hlte Element befindet sich bereits in der letzten Gruppe.
