###############################################################################
# Copyright (c) 2005 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
###############################################################################

#
# Messages in plugin.xml.
#
PLUGIN_NAME=Web Services UI
PLUGIN_VENDOR=Eclipse.org
PLUGIN_DESC=\
The Web services GUI plugin delivers the graphical \
user interface to the Web services function in the WST subproject.

PLUGIN_NEW_CATEGORY_NAME_WS=Web Services


#
#  WS-I Preference pages
#
# WS-I Compliance Page
#
PREFERENCE_CATEGORY_WSI=WS-I Compliance
STOP_NON_WSI=Require compliance
WARN_NON_WSI=Suggest compliance
IGNORE_NON_WSI=Ignore compliance
FOLLOW_WSI_PREFERENCE=Follow Preference

TOOLTIP_PWSI_PAGE=Web Services Interoperability
TOOLTIP_PWSI_RADIO_STOP_NON_WSI=Stop and produce an error message if you make a choice that does not comply with WS-I.
TOOLTIP_PWSI_RADIO_WARNING_NON_WSI=Produce a warning message if you make a choice that does not comply with WS-I.
TOOLTIP_PWSI_RADIO_IGNORE_NON_WSI=Silently allow choices that do not comply with WS-I.
TOOLTIP_PWSI_RADIO_FOLLOW_WSI_PREFERENCE=Project would use WS-I compliance level set in Workspace Preference.

LABEL_WSI_SSBP=WS-I SSBP compliance level
TOOLTIP_PWSI_SSBP_LABEL=WS-I Simple SOAP Binding Profile compliance level
TOOLTIP_PWSI_SSBP_COMBO=Choose the WS-I Simple SOAP Binding Profile compliance level

LABEL_WSI_AP=WS-I AP compliance level
TOOLTIP_PWSI_AP_LABEL=WS-I Attachment Profile compliance level
TOOLTIP_PWSI_AP_COMBO=Choose the WS-I Attachment Profile compliance level

#
#	WSDL Validation
#
LABEL_WSDLVAL=Select whether WSDL validation should be performed on wizards that consume WSDL files
LABEL_WSDLVAL_NONE=No wizard WSDL validation
LABEL_WSDLVAL_REMOTE=Wizard WSDL validation for remote files only
LABEL_WSDLVAL_ALL=Wizard WSDL validation for all WSDL files
LABEL_WAIT_FOR_WSDLVAL=Wait for WSDL validation to complete before moving along the wizards?
BUTTON_WAIT_FOR_WSDLVAL=Wait for pending WSDL validation to complete
TOOLTIP_PWSI_RADIO_WSDLVAL_NONE=Do not perform WSDL validation on the WSDL file or URL input to the Web Services wizard
TOOLTIP_PWSI_RADIO_WSDLVAL_REMOTE=Only perform WSDL validation on remote WSDL file or URL input to the Web Services wizard
TOOLTIP_PWSI_RADIO_WSDLVAL_ALL=Perform WSDL validation on all WSDL file or URL input to the Web Services wizard
TOOLTIP_PWSI_WSDLVAL_LABEL=Select whether WSDL validation should be performed on wizards that consume WSDL files, \nfor example, Web Service wizard in skeleton scenario and Web Service Client wizard.
TOOLTIP_PWSI_LABEL_WAIT_FOR_WSDLVAL=WSDL validation might not have completed during wizard flow, \nwould you like to wait for WSDL validation or cancel it?
TOOLTIP_PWSI_BUTTON_WAIT_FOR_WSDLVAL=Wait for pending WSDL validation to complete and continue with the wizard




