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

#
# Messages in plugin.xml.
#
PLUGIN_NAME=Web Services Consumption Graphical User Interface
PLUGIN_PROVIDER=Eclipse.org

FEATURE_DESCRIPTION=Web services

XP_wsImpl=Web service implementations
XP_wsClientImpl=Web service client implementations
XP_runtimes=Web service runtimes
XP_serviceRuntimes=Combination of a Web service runime, service implementation type, and required facets
XP_clientRuntimes=Combination of a Web service runime, client implementation type, and required facets
XP_tester=Web service test facilities

XP_PUBLIC_UDDI_REGISTRY_TYPES=Public UDDI Registry Types
XP_PRIVATE_UDDI_REGISTRY_TYPES=Private UDDI Registry Types
XP_WEB_SERVICE_CLIENT_TYPES=Web Service Client Types
XP_WEB_SERVICE_TEST=Web Service Test
XP_WEB_SERVICE_SERVER_RUNTIME_TYPES=Web Service Server Runtime Types
XP_WEB_SERVICE_CLIENT_PROJECT_TYPE=clientProjectType
XP_OBJECT_SELECTION_WIDGET=objectSelectionWidget

#
# Wizards.
#
WIZARD_TITLE_WSC=Web Service Client

PLUGIN_NEW_WIZARD_NAME_WS_CLIENT=Web Service Client
PLUGIN_IMPORT_WIZARD_NAME_WS=Web Service
PLUGIN_NEW_WIZARD_DESC_WS_CLIENT=Access an existing XML web service
PLUGIN_IMPORT_WIZARD_DESC_WS=A wizard for importing a web service
IMPORT_WIZARD_DESC_WSIL=Import WSDL references to a WSIL document

#
# Web Samples IDs
#
SAMPLE_TYPE_WEBSERVICES_ID=Web service sample JSPs

#
# Pop-up actions
#
ACTION_GENERATE_JAVA_PROXY=Generate Client
ACTION_GEN_SAMPLE=Generate Sample JSPs

#
# Dialogs
#
CHECKBOX_SHOW_GENERATE_JAVA_PROXY_DIALOG=Hide &Generate Java bean Proxy Dialog
CHECKBOX_SHOW_PROXY2SAMPLE_DIALOG=Hide &Proxy To Sample Generation Dialog
TOOLTIP_PPAD_CHECKBOX_WSDL2PROXY=Hide the dialog for generating the Java bean proxy action.
TOOLTIP_PPAD_CHECKBOX_PROXY2SAMPLE=Hide the dialog for generating the sample application action.

#
#       Web Services Preferance Pages
#
# Categories

PREFERENCE_CATEGORY_SERVER_RUNTIME=Server and Runtime
PREFERENCE_CATEGORY_PROJECT_TOPOLOGY=Project Topology
PREFERENCE_CATEGORY_TEST_FACILITY=Test Facility Defaults
PREFERENCE_CATEGORY_DIALOGS=Popup Dialog Selection


#
# Pop-up actions
#
MENU_RUN=&Run

#
# WebServiceTestPage
#
WSEXPLORER_ID=Web Services Explorer

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

#
# PublicUDDIRegistryType
#
PUBLICUDDIREGISTRYTYPE_NAME_SAP=SAP UDDI Registry
PUBLICUDDIREGISTRYTYPE_NAME_SAP_TEST=SAP UDDI Test Registry
PUBLICUDDIREGISTRYTYPE_NAME_XMETHODS=XMethods Registry
PUBLICUDDIREGISTRYTYPE_NAME_NTTCOMM=NTT Communications Registry

#
# WSIL proxy
#
IMPORT_WIZARD_NAME_WSIL=WSIL
POPUP_GENERATE_WSIL=Generate WSIL

#
# Web Service Server Runtime Type
#
WEBSERVICETYPE_NAME_WSDL=Skeleton Java bean Web Service
WEBSERVICETYPE_NAME_JAVA=Java bean Web Service

#
# Web service client implementation type
#
JAVA_PROXY=Java Proxy
#
# Client project type
#
LABEL_CLIENT_TYPE_WEB=Web
LABEL_CLIENT_TYPE_EJB=EJB
LABEL_CLIENT_TYPE_APP_CLIENT=Application Client
LABEL_CLIENT_TYPE_CONTAINERLESS=Java

#
# Handlers Configuration wizard page
#
POPUP_ADD_HANDLERS=Configure Handlers
POPUP_CONFIG_CLIENT_HANDLERS=Configure Client Handlers
LABEL_HANDLERS_CONFIG=Configure Handlers
