###############################################################################
# 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_WSEXPLORER=Web-Service-Explorer

# Tree Nodes
ALT_OPEN=\u00d6ffnen
ALT_CLOSE=Schlie\u00dfen

# Perspective Toolbar
ALT_BACK=Zur\u00fcck
ALT_FORWARD=Weiter
ALT_ACTION_ENGINE=Aktionsrecorder
ALT_UDDI_PERSPECTIVE=UDDI-Seite
ALT_WSIL_PERSPECTIVE=WSIL-Seite
ALT_WSDL_PERSPECTIVE=WSDL-Seite
ALT_FAVORITES_PERSPECTIVE=Favoriten

# Toolbars
ALT_DOUBLE_CLICK_TO_MAXIMIZE=Zum Maximieren doppelt anklicken
ALT_DOUBLE_CLICK_TO_RESTORE=Zum Wiederherstellen doppelt anklicken

# SetDefaultViewTool
ALT_BACK_TO_TOP=Seitenanfang

# Common Actions
ALT_REFRESH=Aktualisieren
ALT_CLEAR=Inhalt l\u00f6schen
ALT_RESULTS=Ergebnisse

# Common Labels
ALT_NAVIGATOR=Navigator
ALT_ACTIONS=Aktionen
ALT_STATUS=Status
ALT_OTHER_ACTIONS=Andere Aktionen
FORM_BUTTON_GO=&nbsp;&nbsp;Los&nbsp;&nbsp;
FORM_BUTTON_RESET=Zur\u00fccksetzen
FORM_BUTTON_CANCEL=Abbrechen
FORM_LABEL_ACTIONS=Aktionen
FORM_LABEL_ACTIONS_NONE=Keine

# Placeholder for blank table entries
TABLE_BLANK_PLACEHOLDER=--

# Common Form Control Titles
FORM_CONTROL_TITLE_SELECT_ALL_CHECK_BOX=Alles ausw\u00e4hlen
FORM_CONTROL_TITLE_SELECT_ROW_CHECK_BOX=Zeile ausw\u00e4hlen

# Common Messages
MSG_ERROR_UNEXPECTED=IWAB0135E Es ist ein unerwarteter Fehler aufgetreten.
MSG_ERROR_NO_ACTION_SELECTED=IWAB0124E W\u00e4hlen Sie eine Aktion aus.
MSG_ERROR_NO_NODE_SELECTED=IWAB0125E W\u00e4hlen Sie einen Knoten aus.
MSG_SUBMIT_IN_PROGRESS=Bitte warten. Die Operation ist noch nicht abgeschlossen.
MSG_LOAD_IN_PROGRESS=Bitte warten Sie, das Formular wird geladen...

#LaunchWebServiceWizardAction
ALT_LAUNCH_WEB_SERVICE_WIZARD=Web-Service-Assistent starten
FORM_LABEL_CHOOSE_WIZARD=W\u00e4hlen Sie einen Assistenten aus, der gestartet werden soll:
FORM_RADIO_WEB_SERVICE_CLIENT_WIZARD=Web-Service-Client
FORM_RADIO_WEB_SERVICE_SKELETON_WIZARD=Web-Service-Ger\u00fcst
MSG_ERROR_WIZARD_ALREADY_RUNNING=IWAB0126E Ein Web-Service-Assistent l\u00e4uft bereits.  Beenden Sie diesen Assistenten, bevor Sie einen neuen starten.
MSG_ERROR_WSDL_URL_IS_UNREACHABLE=IWAB0127E Das WSDL-Dokument ist nicht erreichbar.

# ImportToFileSystemAction
ALT_WSIL_IMPORT_TO_FS=WSIL in Dateisystem importieren
ALT_WSDL_IMPORT_TO_FS=WSDL in Dateisystem importieren
MSG_ERROR_RETRIEVING_WSDL_DOC=IWAB0128E WSDL-Dokument kann nicht abgerufen werden.
MSG_ERROR_RETRIEVING_WSIL_DOC=IWAB0129E WSIL-Dokument kann nicht abgerufen werden.
MSG_IMPORT_WSDL_SUCCESSFUL=WSDL-Dokument wurde erfolgreich importiert.
MSG_IMPORT_WSIL_SUCCESSFUL=WSIL-Dokument wurde erfolgreich importiert.

# ImportToWorkbenchAction
ALT_IMPORT_WSDL_TO_WORKBENCH=WSDL in Workbench importieren
FORM_LABEL_IMPORT_TO_WORKBENCH_DESC=W\u00e4hlen Sie ein Workbench-Projekt aus, in dem die WSDL-Datei gespeichert werden soll. Sie k\u00f6nnen auch den Namen der WSDL-Datei \u00e4ndern.
WEB_PROJECT_NAME=Webprojekt:
WORKBENCH_PROJECT_NAME=Workbench-Projekt:
LABEL_IMPORT_WSDL=WSDL-Dokument importieren
LABEL_IMPORT_TO_WSIL=Als einen Serviceverweis auf ein WSIL-Dokument importieren
IMPORTED_WSDL_FILE_NAME=WSDL-Dateiname:
WSIL_FILE_NAME=WSIL-Dateiname:
MSG_ERROR_FILE_OVERWRITE_DISABLED=Die Datei "%2" kann nicht auf den Pfad "%1" bezogen erstellt werden, weil das automatische \u00dcberschreiben von Dateien nicht aktiviert wurde. Soll diese Funktion f\u00fcr diese Datei aktiviert werden?
MSG_ERROR_INVALID_WORKBENCH_PROJECT=IWAB0130E W\u00e4hlen Sie ein Workbench-Projekt aus.
MSG_ERROR_INVALID_WSDL_FILE_NAME=IWAB0131E Ung\u00fcltiger Dateiname.
MSG_ERROR_INVALID_WSIL_FILE_NAME=IWAB0470E Ung\u00fcltiger WSIL-Dateiname.
MSG_ERROR_NO_IMPORT_OPTION_SELECTED=IWAB0471E Es wurde keine Importoption ausgew\u00e4hlt.  W\u00e4hlen Sie bitte mindestens eine Importoption aus.
MSG_ERROR_WRITING_TEMP_FILE_TO_FS=IWAB0132E Tempor\u00e4re Datei kann nicht geschrieben werden.
MSG_INFO_IMPORT_TO_WORKBENCH_SUCCESSFUL=IWAB0314I %1 wurde erfolgreich in die Workbench importiert.
MSG_INFO_IMPORT_SERVICE_REF_TO_WSIL_SUCCESSFUL=IWAB0472I Serviceverweis wurde erfolgreich in %1 importiert.

# CheckWorkbenchFileReadOnlyAction
MSG_ERROR_FILE_CHECKOUT_DISABLED=Die Datei "%2" kann nicht auf den Pfad "%1" bezogen erstellt werden, weil der automatische Datei-Check-out nicht aktiviert wurde. Soll diese Funktion f\u00fcr diese Datei aktiviert werden?

# ClearNodeAction
MSG_INFO_NODE_CLEARED=IWAB0133I %1 gel\u00f6scht.

# Table twistees
ALT_TWIST_OPENED=Ausblenden
ALT_TWIST_CLOSED=Einblenden

# WSDL Browser
FORM_LINK_BROWSE=Durchsuchen...
TITLE_WSDL_BROWSER=WSDL-Browser - %1
FORM_LABEL_WSDL_SOURCE=W\u00e4hlen Sie eine WSDL-Quelle aus:
FORM_LABEL_WSDL_SOURCE_WEBPROJECTS=Webprojekte
FORM_LABEL_WSDL_SOURCE_FAVORITES=Favoriten
FORM_LABEL_WEB_PROJECT=Webprojekt
FORM_LABEL_WSDL_URL=WSDL-URL
FORM_BUTTON_REFRESH=Aktualisieren
ALT_WSDL_BROWSER=WSDL-Browser
WSDL_TYPE_SERVICE_INTERFACES=Serviceschnittstellen
WSDL_TYPE_SERVICES=Services

# Calendar Browser
TITLE_CALENDAR_BROWSER=Kalenderbrowser
# 2 character abbreviations for days of the week.
FORM_LABEL_SH_SUNDAY=So
FORM_LABEL_SH_MONDAY=Mo
FORM_LABEL_SH_TUESDAY=Di
FORM_LABEL_SH_WEDNESDAY=Mi
FORM_LABEL_SH_THURSDAY=Do
FORM_LABEL_SH_FRIDAY=Fr
FORM_LABEL_SH_SATURDAY=Sa
# Months of the year
FORM_LABEL_MONTH=Monat:
FORM_LABEL_JANUARY=Januar
FORM_LABEL_FEBRUARY=Februar
FORM_LABEL_MARCH=M\u00e4rz
FORM_LABEL_APRIL=April
FORM_LABEL_MAY=Mai
FORM_LABEL_JUNE=Juni
FORM_LABEL_JULY=Juli
FORM_LABEL_AUGUST=August
FORM_LABEL_SEPTEMBER=September
FORM_LABEL_OCTOBER=Oktober
FORM_LABEL_NOVEMBER=November
FORM_LABEL_DECEMBER=Dezember
FORM_LABEL_YEAR=Jahr:
FORM_LABEL_TIME=Zeit:
FORM_LINK_TODAY=Heute
FORM_LINK_PREVIOUS_YEAR=<<
FORM_LINK_PREVIOUS_MONTH=<
FORM_LINK_NEXT_MONTH=>
FORM_LINK_NEXT_YEAR=>>
ALT_PREVIOUS_YEAR=Letztes Jahr
ALT_PREVIOUS_MONTH=Letzter Monat
ALT_NEXT_MONTH=N\u00e4chster Monat
ALT_NEXT_YEAR=N\u00e4chstes Jahr
ALT_TODAY=Heute
ALT_CALENDAR_BROWSER=Kalenderbrowser
MSG_ERROR_INVALID_TIME_FORMAT=IWAB0368E Die Zeit wurde nicht im Format HH:MM:SS[.SSS] angegeben. Soll stattdessen die aktuelle Zeit verwendet werden?

# Action engine
TITLE_ACTION_RECORDER=Aktionsrecorder
FORM_LABEL_MODE=Modus:
FORM_LABEL_MODE_PLAY=Wiedergabe
FORM_LABEL_MODE_STOP=Stopp
FORM_LABEL_MODE_RECORD=Aufzeichnen
FORM_LABEL_SAVE=Speichern
FORM_LABEL_PLAY_FILE=Wiedergabedatei:
MSG_ERROR_INVALID_PLAY_FILE=IWAB0362E Geben Sie eine Wiedergabedatei ein.

# Frame titles
FRAME_TITLE_PERSPECTIVE_WORKAREA=Web-Service-Explorer - Interner Arbeitsbereich
FRAME_TITLE_PERSPECTIVE_TOOLBAR=Web-Service-Explorer - Symbolleiste
FRAME_TITLE_PERSPECTIVE_CONTENT=Web-Service-Explorer - Seiteninhalt
FRAME_TITLE_WSDL_TOOLBAR=WSDL-Browser - Symbolleiste
FRAME_TITLE_WSDL_CONTENT=WSDL-Browser - Inhalt

# Form titles
FORM_TITLE_PAGE_LOADER=Seitenladeprogramm
FORM_TITLE_PAGE_CONTENT=Geladener Seiteninhalt
FORM_TITLE_LAUNCH_WEBSERVICE_WIZARD=Web-Service-Assistentenformular starten
FORM_TITLE_IMPORT_TO_WORKBENCH=In Workbench-Formular importieren
