###############################################################################
# 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 S&SBP 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 A&P 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




