###############################################################################
# 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
# -------- -------- -----------------------------------------------------------
# 20060515   141536 pmoogk@ca.ibm.com - Peter Moogk
# 20070820   191585 pmoogk@ca.ibm.com - Peter Moogk
# 20070917   202303 pmoogk@ca.ibm.com - Peter Moogk
###############################################################################

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

FEATURE_DESCRIPTION=Web services
WEBSERVICES_CATEGORY=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


#
# WebServiceTestPage
#
WSEXPLORER_ID=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
