###############################################################################
# Copyright (c) 2001, 2007 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
# yyyymmdd bug      Email and other contact information
# -------- -------- -----------------------------------------------------------
# 20070413   176493 makandre@ca.ibm.com - Andrew Mak, WSE: Make message/transport stack pluggable
# 20070820   191585 pmoogk@ca.ibm.com - Peter Moogk
###############################################################################

#
# Messages in plugin.xml.
#
PLUGIN_NAME=Web Services Explorer
PLUGIN_PROVIDER=Eclipse.org

XP_WSE_TRANSPORT_PROVIDER=Web Services Explorer Transport Provider
SOAP_TRANSPORT_PROVIDER=Default SOAP Transport Provider

#
# Messages for the client type extension
#
WEBSERVICECLIENTTYPE_NAME_WSEXPLORER=Stubless (Web Services Explorer)
TASK_LABEL_EXPLORE_WSDL_USING_WSE=Explorer WSDL using Web Services Explorer.

#
# Messages for the WSExplorer type extension
#
MSG_ERROR_LAUNCH_WSEXPLORER=IWAB0366E Unable to launch Web Services Explorer.
MSG_ERROR_LOAD_LAUNCH_OPTIONS=IWAB0367E Unable to load launch options.
MSG_BROKEN_VM_DOES_NOT_SUPPORT_UTF-8=Broken VM does not support UTF-8.

#
# Messages for popup action (Test with Web Services Explorer)
#
POPUP_TEST_WSDL=Test with Web Services Explorer

#
# SOAP transport messages
#
MSG_ERROR_UNSUPPORTED_BINDING={0} binding is unsupported.
MSG_ERROR_UNSUPPORTED_TRANSPORT={0} transport is unsupported.

#
# WebServicePublishPage
#
TOOLTIP_LAUNCH_WS_EXPLORER=Launch the Web Services Explorer
COMMAND_LAUNCH_WS_EXPLORER=Launch the Web Services Explorer

#
# Pop-up actions
#
MENU_RUN=&Run

