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


#
#	WS-I Compliance Messages
#
WSI_SSBP_ERROR=You have made a choice that may result in a Web service that does not comply with the WS-I Simple SOAP Binding Profile. Your current Web services preference is set to require compliance with WS-I SSBP.
WSI_SSBP_WARNING=You have made a choice that may result in a Web service that does not comply with the WS-I Simple SOAP Binding Profile. Do you wish to ignore this warning and continue?
WSI_SSBP_INCOMPLIANT_RUNTIME=The selected Web Service runtime does not comply with the WS-I Simple SOAP Binding Profile.
WSI_AP_ERROR=You have made a choice that may result in a Web service that does not comply with the WS-I Attachment Profile. Your current Web services preference is set to require compliance with WS-I AP.
WSI_AP_WARNING=You have made a choice that may result in a Web service that does not comply with the WS-I Attachment Profile. Do you wish to ignore this warning and continue?
WSI_AP_INCOMPLIANT_RUNTIME=The selected Web Service runtime does not comply with the WS-I Attachment Profile.
IGNORE_LABEL=Ignore
IGNORE_DESCRIPTION=Ignore the WS-I non-compliance and continue
IGNORE_ALL_LABEL=Ignore All
IGNORE_ALL_DESCRIPTION=Always ignore the WS-I non-compliance and continue
CANCEL_LABEL=Cancel
TASK_LABEL_WSI_NONCOMPLIANT=Check for WSI Compliance
TASK_DESC_WSI_NONCOMPLIANT=Check for WSI Compliance
CANCEL_DESCRIPTION=Cancel
NOT_OK=Cannot continue due to WS-I non-compliance








