###############################################################################
# Copyright (c) 2004, 2006 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
#  -------- -------- -----------------------------------------------------------
#  20060204 124143   rsinha@ca.ibm.com - Rupam Kuehner
#  20060204 124408   rsinha@ca.ibm.com - Rupam Kuehner 
#  20060411 136134   kathy@ca.ibm.com - Kathy Chan     
###############################################################################

#
# Messages in plugin.xml.
#

PLUGIN_NEW_WIZARD_NAME_WS_CLIENT=Web Service Client
#
# Web services "Internet" preferences extension.
#

#
# Web Samples IDs
#

#
# Pop-up actions
#
ACTION_GENERATE_JAVA_PROXY=Generate Client

#
# Dialogs
#
CHECKBOX_SHOW_GENERATE_JAVA_PROXY_DIALOG=Show Generate Java bean Proxy Dialog
TOOLTIP_PPAD_CHECKBOX_WSDL2PROXY=Show the dialog for generating the Java bean proxy action.

#
#       Web Services Preferance Pages
#
# Categories
#

#
# Preferences Tooltips
#

#
#Server Runtime Preferences
#
TOOLTIP_SRPF_COMBO_SERVER=The preferred server type
TOOLTIP_SRPF_COMBO_RUNTIME=The preferred Web service runtime
TOOLTIP_SRPF_COMBO_J2EE=The preferred J2EE version

#
# General messages.
#
MSG_ERROR_TASK_EXCEPTED=IWAB0234E An internal error occurred. Details: {0}
MSG_ERROR_NO_SERVER_RUNTIME=No suitable server can be found for the {0} Web service runtime. Go to Window > Preferences. Select Server > Installed Runtimes and configure one of the following: {1}


#
# Wizard page task labels and descriptions
# (used only for progress indication).
#

#
# Common wizard strings.
#
LABEL_FOLDER_NAME=Folder:
LABEL_JSP_FOLDER_NAME=JSP folder:
LABEL_WEB_PROJECT_NAME=Web project:
LABEL_WEBSERVICETYPE=Web service type:
LABEL_J2EE_VERSION=J2EE version:
LABEL_NA=N/A

BUTTON_BROWSE=Browse...
BUTTON_BROWSE_FILES=Browse files...

BOTTOMUP_LABEL=Bottom up
TOPDOWN_LABEL=Top down
CLIENT_LABEL=Client
COMBINED_TYPE_AND_RUNTIME_LABEL={0} {1}



#
# Wizards.
#
WIZARD_TITLE_WSC=Web Service Client

#
# WebServiceProjectPage
#
PAGE_TITLE_WS_PROJECT=Web Services
PAGE_DESC_WS_PROJECT=Review your Web service options and make any necessary changes before proceeding to the next page.
BUTTON_START_WEB_PROJECT=Start Web service in Web project
#BUTTON_DEPLOY_WEB_PROJECT=Deploy Web service to a server type
BUTTON_INSTALL_SERVICE_WEB_PROJECT=Install Web service on server
BUTTON_INSTALL_CLIENT_WEB_PROJECT=Install Web service client on server (managed clients only)
GROUP_SCENARIO_SERVICE=Service
GROUP_SCENARIO_CLIENT=Client proxy
LABEL_WEBSERVICECLIENTTYPE=Client proxy type:



# Items common to WebServiceRuntimeSelectionPage and WebServiceClientRuntimeSelectionPage
# WebServiceRuntimeSelectionPage
PAGE_TITLE_WS_RUNTIME_SELECTION=Service Deployment Configuration
PAGE_DESC_WS_RUNTIME_SELECTION=Choose from the list of runtimes and deployment servers, or use the default settings.
LABEL_RUNTIMES_LIST=Web service runtime:
LABEL_SERVERS_LIST=Server:
LABEL_EDIT_BUTTON=Edit...
LABEL_SERVICE_EAR_MODULE=Service EAR module:
LABEL_CLIENT_EAR_MODULE=Client EAR module:
LABEL_CLIENT_MODULE=Client module:
LABEL_SERVICE_MODULE=Service module:
LABEL_CLIENT_PROJECT=Client project:
LABEL_SERVICE_PROJECT=Service project:
LABEL_CLIENT_EAR_PROJECT=Client EAR project:
LABEL_SERVICE_EAR_PROJECT=Service EAR project:

#
# Client component type labels
#
LABEL_CLIENT_COMP_TYPE_WEB=Web
LABEL_CLIENT_COMP_TYPE_EJB=EJB
LABEL_CLIENT_COMP_TYPE_APP_CLIENT=Application Client
LABEL_CLIENT_COMP_TYPE_CONTAINERLESS=Java


TOOLTIP_PWRS_TEXT_RUNTIME=The runtime to be used.
TOOLTIP_PWRS_TEXT_SERVER=The server to be used.
TOOLTIP_PWRS_J2EE_VERSION=J2EE version to be used.

LABEL_SELECTION_VIEW_TITLE=Server-Side Deployment Selection:
LABEL_SELECTION_VIEW_RUNTIME=Choose Web service runtime first
LABEL_SELECTION_VIEW_SERVER=Choose server first
LABEL_SELECTION_VIEW_EXPLORE=Explore options

LABEL_TREE_EXISTING_SERVERS=Existing Servers
LABEL_TREE_SERVER_TYPES=Server Types

MSG_INVALID_SRT_SELECTIONS={0} does not support the {1} Web service runtime. Choose a different server or runtime to proceed through the Web services wizard.
MSG_NO_RUNTIME=No runtime specified for the {0} scenario.
MSG_NO_SERVER=No server specified for the {0} scenario.
MSG_ERROR_STUB_ONLY={0} has only stub runtimes associated with it. Choose a different server or configure a non-stub runtime in the server preferences. 
MSG_WARN_STUB_ONLY={0} has only stub runtimes associated with it so the server will not be created or started.

MSG_SERVER_TARGET_MISMATCH=The project, {0}, has a server target which is not compatible with the selected server type
MSG_J2EE_MISMATCH=The project, {0}, has a different J2EE level from the selected J2EE level
MSG_SERVICE_PROJECT_EMPTY=The service project {0} cannot be empty. Select a service project {0}.
MSG_SERVICE_EAR_EMPTY=The service EAR {0} cannot be empty. Select a service EAR {0}.
MSG_CLIENT_PROJECT_EMPTY=The client project {0} cannot be empty. Select a client project {0}.
MSG_CLIENT_EAR_EMPTY=The client EAR {0} cannot be empty. Select a client EAR {0}.

MSG_INVALID_EJB_PROJECT={0} is not an EJB project. Choose an EJB project, or enter a new EJB project name.
MSG_INVALID_WEB_PROJECT={0} is not a Web project. Choose a Web project, or enter a new Web project name.
MSG_INVALID_PROJECT_TYPE={0} is not a {1} project. Choose a {1} project, or enter a new project name.
MSG_MODULE=module
MSG_MODULE_NAME_AND_PROJECT_NAME_NOT_THE_SAME=The flexible project preference is off. Therefore, project names and module names must be the same for new modules.

MSG_SERVICE_RUNTIME_DOES_NOT_SUPPORT_PROJECT=The {0} Web service runtime does not support the service project {1}.
MSG_SERVICE_SERVER_DOES_NOT_SUPPORT_PROJECT=The {0} server does not support the service project {1}. 
MSG_SERVICE_RUNTIME_DOES_NOT_SUPPORT_TEMPLATE=The {0} Web service runtime does not support the service project type {1}.
MSG_SERVICE_SERVER_DOES_NOT_SUPPORT_TEMPLATE=The {0} server does not support the service project type {1}.

MSG_CLIENT_RUNTIME_DOES_NOT_SUPPORT_PROJECT=The {0} Web service runtime does not support the client project {1}.
MSG_CLIENT_SERVER_DOES_NOT_SUPPORT_PROJECT=The {0} server does not support the client project {1}.
MSG_CLIENT_RUNTIME_DOES_NOT_SUPPORT_TEMPLATE=The {0} Web service runtime does not support the client project type {1}.
MSG_CLIENT_SERVER_DOES_NOT_SUPPORT_TEMPLATE=The {0} server does not support the client project type {1}.

MSG_SAME_CLIENT_AND_SERVICE_EARS=Your selected service and client {0} modules have the same name.  Proceeding with this configuration may result in runtime errors.
MSG_SAME_CLIENT_AND_SERVICE_COMPONENTS=Your selected service and client {0} modules have the same name.  Proceeding with this configuration will result in runtime errors.
MSG_SAME_CLIENT_AND_SERVICE_PROJECTS=Your selected service and client projects are the same.  Proceeding with this configuration will result in errors.
MSG_WRONG_CLIENT_PROJECT_TYPE=The selected client project, {0}, is not a {1} project. Please select a {1} project or enter a new project name.
MSG_CLIENT_SUB=client
MSG_SERVICE_SUB=service
MSG_GENERAL_PROJECT_AND_EAR=Select the {0} project and the EAR project with which you want it to be associated.
MSG_EAR_PROJECT_WILL_BE_CREATED=If an EAR or project does not exist or is currently unassociated, it will be created and \nassociated as required when you click Next.

MSG_EAR_WILL_BE_ASSOCIATED=The selected {0} project will be associated with the EAR project.
MSG_PROJECT_WILL_BE_CREATED=The {0} project will be created and associated with the EAR project.
MSG_EAR_WILL_BE_CREATED=The {0} EAR project will be created and associated with the project.
MSG_PROJECT_AND_EAR_CREATED=The {0} project and EAR project will be created and associated with one another.

MSG_CLIENT_CANNOT_ASSOCIATE=The client project, {0}, cannot be associated with the EAR, {1}. Choose an EAR with a J2EE level of {2} or higher.
MSG_SERVICE_CANNOT_ASSOCIATE=The service project, {0}, cannot be associated with the EAR, {1}. Choose an EAR with a J2EE level of {2} or higher.

# WebServiceClientRuntimeSelectionPage
PAGE_TITLE_WS_CLIENT_RUNTIME_SELECTION=Client Environment Configuration
PAGE_DESC_WS_CLIENT_RUNTIME_SELECTION=Choose from the list of supported runtimes and servers for the client environment, or use the default settings.

LABEL_CLIENT_SELECTION_VIEW_TITLE=Client-Side Environment Selection:
LABEL_CLIENT_TYPE=Client Project type:
LABEL_SERVICE_TYPE=Service Project type:
LABEL_WEB=Web
LABEL_EJB=EJB
LABEL_NO_LABEL=

#
# Items common to WebServiceMappingsPage, WebServiceMappingsPage (client), and WebServiceSOAPBindingPage
#
PAGE_MSG_VALIDATION_INTERNAL_ERROR=An internal error occurred during page validation. See logs for details.

#
# WebServiceMappingsPage
#
PAGE_TITLE_WS_XML2BEAN=Web Service Skeleton XML to Java Mappings
PAGE_DESC_N2P_MAPPINGS=Define custom mapping for namespace to package.
MSG_MAPPING_DUPLICATE_ENTRIES=Duplicate {0} mapped to the same {1}.


#
# The two ITEM_* strings are entries in a list box of mappings.
# There are two forms, one when the page is in Java-to-XML mode:
#   <java-bean-name>, <encoding-style>
# and one when the page is in XML-to-Java mode:
#   <xml-namespace-uri>:<xml-short-name>, <encoding-style>
# where:
#   <java-bean-name> is a fully-qualified Java class name
#   <xml-namespace-uri> is the namespace of an XML type
#   <xml-short-name> is the XML type name within the namespace
#   <encoding-style> is the encoding style (SOAP or Literal XML)
#

#
# WebServiceProxyPage
#
BUTTON_GENERATE_PROXY=Generate a proxy

#
# WebServiceSkeletonConfigPage
#
PAGE_DESC_WSSKEL_CONFIG=Define a skeleton Java bean as a Web service.
PAGE_TITLE_WSSKEL_CONFIG=Web Service Skeleton Java Bean Configuration
TOOLTIP_PBSC_TEXT_SKELETON_FOLDER=Folder for generated Java skeleton.
TOOLTIP_PBSC_BUTTON_SKELETON_FOLDER_BROWSE=Browse folders.
LABEL_SKELETON_ROOT_NAME=Skeleton folder:

#
# WebServiceBeanClassPage
#
LABEL_BEAN_CLASS_NAME=Bean:
PAGE_MSG_BEAN_CANNOT_BE_EMPTY=Please select a Java bean class.
BUTTON_BROWSE_CLASSES=Browse classes...


#
# WebServiceTestPage
#
PAGE_TITLE_WSTEST=Web Service Test Page
PAGE_DESC_WSTEST=Select a test facility
CHECKBOX_TEST_WEBSERVICE=Test the Web service
CHECKBOX_MONITOR_WEBSERVICE=Monitor the Web service
MSG_ERROR_UNABLE_TO_LAUNCH_WSDL_TEST=An error occurred. Unable to launch WSDL test facility.

#
# WebServiceExplorerPage
#
BUTTON_LAUNCH_SERVICE_TEST=Launch

#
# WebServiceClientTestPage
#
PAGE_TITLE_WS_SAMPLE=Web Service Client Test
PAGE_DESC_WS_SAMPLE=Do you want to test the generated proxy?
BUTTON_TEST=Test the generated proxy
LABEL_TEST_TYPES=Test facility
BUTTON_RUN_TEST=Run test on server
LABEL_METHODS=Methods
LABEL_JSP_PROJECT_NAME=JSP project:
MSG_ERROR_JTS_PROXY_NOT_COMPILED=IWAB0357E The Generated proxy was not found. WebService sample jsps cannot be generated.
MSG_ERROR_MALFORMED_URL=IWAB0358E Test client URL is malformed.

#
# WebServiceBeanMethodsPage
#
BUTTON_SELECT_ALL=Select All
BUTTON_DESELECT_ALL=Deselect All
TOOLTIP_PBME_BUTTON_SELECT_ALL=Select all methods
TOOLTIP_PBME_BUTTON_DESELECT_ALL=Deselect all methods

#
# WebServiceWSDLSelectionPage
#
PAGE_TITLE_WSDL_SELECTION=Web Service WSDL File Selection
PAGE_DESC_WSDL_SELECTION=Select a WSDL file.


#
# WebServicePublishPage
#
PAGE_TITLE_WS_PUBLISH=Web Service Publication
PAGE_DESC_WS_PUBLISH=Do you want to publish your Web service?
PAGE_TITLE_WS_FIND=Find a Web service
PAGE_DESC_WS_FIND=Do you want to find a Web service?
BUTTON_WS_PUBLISH=Launch the Web Services Explorer to publish this Web service to a UDDI Registry
BUTTON_WS_PUBLISH_PRIVATE_UDDI=Launch the Web Services Explorer to publish this Web service to the Unit Test UDDI Registry
BUTTON_WS_FIND=Launch the Web Services Explorer to find a Web service from a UDDI Registry
BUTTON_WS_FIND_PRIVATE_UDDI=Launch the Web Services Explorer to find a Web service from the Unit Test UDDI Registry
LABEL_PUBLIC_UDDI_REGISTRIES=Public UDDI Registry

#
# EJB UI strings
#
LABEL_EJB_BEAN_NAME=EJB bean
TABLE_TITLE_EJB_BEAN_NAMES=Stateless EJB beans
TABLE_TITLE_EJB_PROJECT_NAME=EJB project
LABEL_EAR_PROJECTS=EAR projects
TOOLTIP_EAR_PROJECTS=Enterprise application projects.
TOOLTIP_TABLE_BEAN_NAMES=Select an EJB.

#
# Tooltips for WebServiceWSDLSelectionPage
#
TOOLTIP_PWWS_PAGE=

#
# Tooltips for beans.WebServiceBeanClassPage
#
TOOLTIP_PBCL_PAGE=
TOOLTIP_PBCL_TEXT_BEAN_CLASS=Selected Java bean.
TOOLTIP_PBCL_BUTTON_BEAN_CLASS_BROWSE=Browse classes.
TOOLTIP_PBCL_BUTTON_BEAN_RESOURCE_BROWSE=Browse Java files.

#
# Tooltips for beans.WebServiceTestPage
#
TOOLTIP_PSTP_COMBOBOX_TEST=Test facilities available to test the service.
TOOLTIP_PSTP_LAUNCH_BUTTON=Launch the selected test facility.

#
# Tooltips for WebServiceRuntimeSelectionPage
#
TOOLTIP_PWRS_PAGE=
TOOLTIP_PWRS_LIST_RUNTIMES=Select from the following deployment runtime(s).
TOOLTIP_PWRS_LIST_SERVERS=Select from application server(s).
TOOLTIP_PWRS_RADIO_SERVER=Server oriented selection.
TOOLTIP_PWRS_RADIO_RUNTIME=Runtime oriented selection.
TOOLTIP_PWRS_RADIO_EXPLORE=Explore combinations.

#
# Tooltips for WebServiceClientRuntimeSelectionPage
#
TOOLTIP_PWCR_COMBO_CLIENT_TYPE=Client project type.
TOOLTIP_PWCR_COMBO_SERVICE_TYPE=Service project type.

#
# Tooltips for WebServiceProjectPage
#
TOOLTIP_PWPR_COMBO_TYPE=Web service implementation type.
TOOLTIP_PWPR_GROUP_SCENARIO_SERVICE=Service defaults for this wizard scenario.
TOOLTIP_PWPR_CHECKBOX_GENERATE_PROXY=Enable/disable proxy generation for this scenario.
TOOLTIP_PWPR_CHECKBOX_START_WEB_PROJECT=Start Web service in Web project for this scenario.
TOOLTIP_PWPR_CHECKBOX_INSTALL_SERVICE_WEB_PROJECT=Install the Web service on the server for this scenario.
TOOLTIP_PWPR_CHECKBOX_INSTALL_CLIENT_WEB_PROJECT=Install the Web service client on the server for this scenario (managed client only). 
TOOLTIP_PWPR_CHECKBOX_LAUNCH_WS=Launch the Web Services Explorer to publish the Web service in this scenario to a UDDI Registry.
TOOLTIP_PWPR_CHECKBOX_TEST_SERVICE=Select this to explore the Web service created.
TOOLTIP_PWPR_CHECKBOX_MONITOR_SERVICE=Select this to monitor the SOAP traffics of this Web service.
TOOLTIP_PWPR_GROUP_SCENARIO_CLIENT=Client proxy defaults for this wizard scenario.
TOOLTIP_PWPR_COMBO_CLIENTTYPE=Client proxy selection type.

#
# Tooltips for WebServicePublishPage
#
TOOLTIP_PWPB_PAGE=
TOOLTIP_PWPB_CHECKBOX_WS_LAUNCH=Publish the Web service.

#
# WSIL proxy
#
PAGE_WSIL_IMPORT=WSIL Import Page
TITLE_WSIL_IMPORT=WSIL Import
DESC_WSIL_IMPORT=Import WSDL references to a WSIL document
PAGE_TITLE_WS_SELECTION=Web Service Selection Page
PAGE_DESC_WS_SELECTION=Enter a web service URI.

PAGE_MSG_LOADING_WEB_SERVICE_URI=Loading Web service URI...
PAGE_MSG_INVALID_WEB_SERVICE_URI=Invalid Web service URI.  Enter an URI to a WSDL, WSIL or HTML document.
PAGE_MSG_NO_SUCH_FILE=File "{0}" does not exists.
PAGE_MSG_SELECTION_MUST_BE_WSDL=Selection must be WSDL.
PAGE_MSG_INVALID_WSIL_FILE_NAME=Invalid WSIL file name.  WSIL file name must end with .wsil

MSG_ERROR_URI_NOT_RESOLVABLE=IWAB0469E "{0}" is not resolvable.
MSG_ERROR_WSDL_HAS_NO_SERVICE_ELEMENT=IWAB0551E WSDL file at {0} has no service element.

LABEL_WSIL_URI=WSIL URI:
LABEL_BROWSE=Browse
LABEL_WSDL=WSDL:
LABEL_WSDL_URI=WSDL URI
LABEL_IMPORT=Import...
LABEL_ADD=Add
LABEL_REMOVE=Remove
LABEL_WS_SELECTION=Enter an URI to a WSDL, WSIL or HTML document:
LABEL_SELECT_WSDL=Select a WSDL
LABEL_VALIDATE_MESSAGES=WSDL validation messages:

TOOLTIP_WSIL_IMPORT_PAGE=This page allows you to add WSDL references to a WSIL document.
TOOLTIP_WSIL_TEXT_WSIL=Enter the location of a new or existing WSIL document.
TOOLTIP_WSIL_BUTTON_BROWSE_WSIL=Browse for a WSIL document.
TOOLTIP_WSIL_TABLE_WSDL=Enter the URIs of the WSDLs that are going to be added as service references.
TOOLTIP_PCON_PAGE=Select a web service for consumption.
TOOLTIP_PCON_TEXT_WS=Enter an URI to a WSDL, WSIL or HTML document.
TOOLTIP_PCON_BUTTON_BROWSE_WS=Browse for a web service resource.
TOOLTIP_VALIDATE_TEXT_MESSAGE=Messages from WSDL validation.
TOOLTIP_TABLE_VALIDATE_MESSAGE=Use the Web Service Profile Compliance and Validation preference to enable or disable WSDL validation.

#
# Table column heading for ValidationMessageViewerWidget
#
TABLE_COLUMN_VALIDATION_SEVERITY=Severity
TABLE_COLUMN_VALIDATION_LINE=Line
TABLE_COLUMN_VALIDATION_COLUMN=Column
TABLE_COLUMN_VALIDATION_MESSAGE=Message

#
# Tooltips for client.WebServiceClienTestPage
#
TOOLTIP_PWSM_PAGE=
TOOLTIP_PWSM_CHECKBOX_TEST=Enable/disable Test.
TOOLTIP_PWSM_COMBOBOX_TEST=Select the test type.
TOOLTIP_PWSM_CHECKBOX_LAUNCH=Run test on a server.
TOOLTIP_PWSM_TEXT_JSP_FOLDER=Destination folder of generated sample files.
TOOLTIP_PWSM_BUTTON_JSP_FOLDER_BROWSE=Browse folders.
TOOLTIP_PWSM_BUTTON_SELECT_ALL=Select all methods.
TOOLTIP_PWSM_BUTTON_DESELECT_ALL=Deselect all methods.
TOOLTIP_PWSM_COMBO_PROJECT=Web project for generated sample.
TOOLTIP_PWSM_TEXT_SAMPLE_FOLDER=Destination folder of generated sample files.
TOOLTIP_PWSM_TREE_METHODS=Methods to generate into the sample.
TOOLTIP_PWSM_EAR_PROJECT=EAR project for the generated sample.

#
# HTTP Basic Auth
#
DIALOG_TITLE_HTTP_BASIC_AUTH=HTTP Basic Authentication
LABEL_URL=URL:
LABEL_HTTP_BASIC_AUTH_USERNAME=User name:
LABEL_HTTP_BASIC_AUTH_PASSWORD=Password:

TOOLTIP_HTTP_BASIC_AUTH_USERNAME=Enter your HTTP basic authentication user name.
TOOLTIP_HTTP_BASIC_AUTH_PASSWORD=Enter your HTTP basic authentication password.

#
# Generate Handler Skeleton
#
MSG_ERROR_GENERATE_HANDLER_SKELETON=IWAB0359E Error in generating handler skeleton.
MSG_ERROR_WRITE_FILE=IWAB0360E Error in writing file {0}.

#
# Handlers Configuration wizard page
#
LABEL_HANDLERS_CONFIG=Handler Configuration
LABEL_BUTTON_ADD=Add
LABEL_BUTTON_REMOVE=Remove
LABEL_BUTTON_MOVE_UP=Move Up
LABEL_BUTTON_MOVE_DOWN=Move Down
LABEL_BUTTON_GEN_SKELETON=Generate skeleton classes for new handlers
LABEL_COMBO_SOURCE_LOC=Output folder:
LABEL_COMBO_WS_CLIENT_REF=Client Service Reference:
LABEL_COMBO_WS_SERVICE_DESC=Service Description:

LABEL_HANDLER_NAME=Name
LABLE_HANDLER_CLASS=Class Name
LABEL_HANDLER_PORT=Port Name

DIALOG_TITLE_WS_ADD_HANDLER=Add New Handler
LABEL_TEXT_HANDLER_NAME=Name:
LABEL_TEXT_HANDLER_CLASS=Class name:
LABEL_TEXT_HANDLER_PORT=Port name:

PAGE_TITLE_SERVICE_HDLR_CONFIG=Service Handlers Configuration
PAGE_DESC_SERVICE_HDLR_CONFIG=Configure service-side handlers
PAGE_TITLE_CLIENT_HDLR_CONFIG=Client Handlers Configuration
PAGE_DESC_CLIENT_HDLR_CONFIG=Configure client-side handlers

TOOLTIP_EDIT_WS_HANDLERS=Configure Web Service Handlers
TOOLTIP_BUTTON_GEN_SKELETON=Select to generate skeleton classes for new handlers.
TOOLTIP_COMBO_SOURCE_LOC=Select the output location for file generation.
TOOLTIP_TEXT_HANDLER_NAME=Handler name
TOOLTIP_TEXT_HANDLER_CLASS=Handler class name
TOOLTIP_TEXT_HANDLER_PORT=Handler port component name
TOOLTIP_WS_CLIENT_REF=Select a client service-reference to show its handlers.
TOOLTIP_WS_SERVICE_DESC=Select a service description to show its handlers.

#
# ClientHandlersWidgetDefaultingCommand
#
MSG_ERROR_WEB_SERVICE_CLIENTS_NOT_FOUND=No Web service clients were found. Create a Web service client before configuring Web service client handlers.

#
# ServiceHandlersWidgetDefaultingCommand
#
MSG_ERROR_WEB_SERVICES_NOT_FOUND=No Web services were found.  Create a Web service before configuring Web service handlers.
MSG_ERROR_WSDD_NOT_FOUND=Unable to launch handler wizard.  No deployment descriptor was found for this Web service.
#
# OpenJavaEditorCommand
#
MSG_ERROR_UNABLE_TO_OPEN_JAVA_EDITOR=IWAB0029E Unable to open class {0} from project {1} in the Java editor.

#
# CheckIfServiceProject
#
MSG_WARN_IS_SERVICE_PROJECT=The selected client project, {0}, contains the Web service. Proceeding with this configuration may result in runtime errors when invoking the Web service. Would you like to proceed?
MSG_USER_ABORTED=User pressed cancel in warning dialog which warned about the selected client project being the service project.

#
# Missing third party file error message
#
MSG_MISSING_THIRD_PARTY_FILES=Missing third party files.  Refer to http://www.eclipse.org/webtools/wst/components/ws/download_instructions_for_jars.html

#
# WSDLSelectionOutputCommand
#
MSG_WARNING_NO_SERVICE_ELEMENT=The WSDL file does not contain a Service element.  Therefore a service interface and Java proxy will not be generated and as a result, a Java test client will not be launched.  Click OK to proceed, or click Cancel to select another WSDL file.  Alternately, exit the wizard and use the WSDL editor to create a Service WSDL document.

#
# CheckWSDLValidationCommand
#
STILL_VALIDATING_WSDL=Wizard WSDL validation in Progress.  \n- Click Cancel to cancel the current WSDL validation and continue. \n- Click Cancel and Update to update the preference to always cancel incomplete WSDL validation while traversing the wizard.  \n- Click Wait to wait for WSDL validation to complete.
CANCEL_VALIDATION_LABEL=Cancel
CANCEL_VALIDATION_DESCRIPTION=Cancel the current WSDL validation and continue
CANCEL_ALL_VALIDATION_LABEL=Cancel and Update
CANCEL_ALL_VALIDATION_DESCRIPTION=Update the preference to always cancel incomplete WSDL validation while traversing the wizard.
WAIT_VALIDATION_LABEL=Wait
WAIT_VALIDATION_DESCRIPTION=Wait for WSDL validation to complete
TASK_LABEL_CHECK_WSDL_VALIDATION=Check for WSDL validation
TASK_DESC_CHECK_WSDL_VALIDATION=Check if WSDL validation has completed
WAIT_FOR_WSDL=Do not continue with wizard.  Wait for WSDL validation to complete.

#
# WSDLValidation messages
#
MESSAGE_VALIDATE_NO_WSDL=Wizard WSDL validation is disabled.
MESSAGE_VALIDATE_REMOTE_WSDL=Wizard WSDL validation is only enabled for remote files.
MESSAGE_VALIDATE_ALL_WSDL=Wizard WSDL validation is enabled.
MESSAGE_VALIDATE_IN_PROGRESS=WSDL validation in progress ...
ERROR_MESSAGES_IN_VALIDATION=The WSDL file contains validation error(s).
WARNING_MESSAGES_IN_VALIDATION=The WSDL file contains validation warning(s).
WARNING_IF_CONTINUE=Continuing with the wizard may result in generation or runtime problem.
VALIDATION_COMPLETED=WSDL validation completes with no warning or error.
TOOLTIP_VALIDATE_TEXT_MESSAGE_SUMMARY=WSDL validation preference can be changed using the Web Services Profile Compliance and Validation preference.


#
# Start server page
#
PAGE_TITLE_WS_START_SERVER=Server startup page
PAGE_DESC_WS_START_SERVER=Start the server from this page.
LABEL_START_SERVER_TEXT1=In order to proceed the server "{0}" must be started.
LABEL_START_SERVER_TEXT2=Once the server is started the "next" button will be enabled.
LABEL_START_SERVER_TEXT3=The "back" button can be used while the server is starting to
LABEL_START_SERVER_TEXT4=change any previous settings in this wizard.
LABEL_START_SERVER_BUTTON=Start server
TOOLTIP_START_SERVER_BUTTON=Start the server
TEXT_SERVER_STATUS=Currently the server is {0}.
TEXT_SERVER_MSG=Server {0}
TEXT_SERVER_STARTED=started
TEXT_SERVER_STARTING=starting
TEXT_SERVER_STOPPED=stopped

#
# Ant task List options
#

# Note to translation do not translate keyword RuntimeId
MSG_INFO_ANT_RUNTIME_HEADING=Web Service Runtime IDs (RuntimeId)
MSG_INFO_ANT_SERVER_RUNTIME=Server runtime: {0}
MSG_INFO_ANT_CLIENT_RUNTIME=Client runtime: {0} 

# Note to translation do not translate keyword ServerId
MSG_INFO_ANT_SERVER_HEADING=Server IDs (ServerId)
MSG_INFO_ANT_SERVER=Server: {0}
