###############################################################################
# Copyright (c) 2004, 2009 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     
# 20060221   119111 rsinha@ca.ibm.com - Rupam Kuehner
# 20060321   128827 joan - Joan Haggarty
# 20060329   128069 rsinha@ca.ibm.com - Rupam Kuehner
# 20060407   135443 joan@ca.ibm.com - Joan Haggarty
# 20060411   136134 kathy@ca.ibm.com - Kathy Chan
# 20060417   136390 joan@ca.ibm.com - Joan Haggarty
# 20060413   135581 rsinha@ca.ibm.com - Rupam Kuehner
# 20060418   136335 joan@ca.ibm.com - Joan Haggarty
# 20060420   136158 rsinha@ca.ibm.com - Rupam Kuehner
# 20060420   120714 kathy@ca.ibm.com - Kathy Chan
# 20060420   135912 joan@ca.ibm.com - Joan Haggarty
# 20060510   141115 rsinha@ca.ibm.com - Rupam Kuehner
# 20060509   119296 pmoogk@ca.ibm.com - Peter Moogk
# 20060602   145054 kathy@ca.ibm.com - Kathy Chan
# 20070427   177360 pmoogk@ca.ibm.com - Peter Moogk
# 20071031   140518 joan@ca.ibm.com - Joan Haggarty
# 20080318   213330 trungha@ca.ibm.com - Trung, Non-conventional Java naming prevents creating Web Services (client)
# 20080326   171705 trungha@ca.ibm.com - Trung, improve AntTask errors report
# 20080325   184761 gilberta@ca.ibm.com - Gilbert Andrews
# 20080331   225032 makandre@ca.ibm.com - Andrew Mak, Error msg references renamed category
# 20080416   215084 gilberta@ca.ibm.com - Gilbert Andrews
# 20080425   221232 gilberta@ca.ibm.com - Gilbert Andrews
# 20090302   249602 ericdp@ca.ibm.com - Eric D. Peters, PII- association warning message needs update
# 20090401   269994 ericdp@ca.ibm.com - Eric D. Peters, NLS- Validation messages unclear when servers don't support runtime/project combo
# 20090909   244814 mahutch@ca.ibm.com - Mark Hutchinson
###############################################################################

#
# 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 > Runtime Environments and configure a server runtime.
MSG_ERROR_NO_SERVER_RUNTIME_INSTALLED={0} is not installed. Go to Window > Preferences. Select Server > Runtime Environments and configure a server runtime.


#
# 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_WEBSERVICEIMPL=Service implementation:
LABEL_WEBSERVICEDEF=Service definition:
LABEL_J2EE_VERSION=J2EE version:
LABEL_NA=N/A

BUTTON_BROWSE=B&rowse...
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_SERVICE=Select a service implementation or definition and move the sliders to set the level of service and client generation.
PAGE_DESC_WS_CLIENT=Select a service definition and move the slider to set the level of client generation.
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 type:

TOOLTIP_WSWSCEN_SERVICEPROJECT_LINK=Click on the link to edit service project and EAR settings.
TOOLTIP_WSWSCEN_CLIENTPROJECT_LINK=Click on the link to edit client project and EAR settings.

DIALOG_TITILE_SERVICE_IMPL_SELECTION=Select Service Implementation
DIALOG_TITILE_SERVICE_DEF_SELECTION=Select Service Definition
DIALOG_TITILE_SERVICE_PROJECT_SETTINGS=Specify Service Project Settings
DIALOG_TITILE_CLIENT_PROJECT_SETTINGS=Specify Client Project Settings

# Items common to WebServiceRuntimeSelectionPage and WebServiceClientRuntimeSelectionPage
# WebServiceRuntimeSelectionPage
LABEL_SUMMARY=Configuration:
LABEL_SUMMARY_NO_CLIENT=Configuration: No client generation.
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 runtime:
LABEL_SERVERS_INSTANCES=Server name:
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=Click on the link to specify the web service runtime.
TOOLTIP_PWRS_TEXT_SERVER=Click on the link to specify a server.
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_NO_OBJECT_SELECTION=Select a service implementation.
MSG_NO_SERVICE_SELECTION=Select a service definition.
MSG_WARN_SERVICE_IMPL_NAMING_CONVENTION=The service implementation selected does not follow Java naming conventions.
MSG_INVALID_SERVICE_IMPL=The service implementation selected is invalid.
MSG_INVALID_SERVICE_DEF=The service definition selected is invalid.
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_WARN_NO_SERVICE_SERVER=No server has been selected. The Web service will not be deployed, installed, or run.
MSG_WARN_NO_CLIENT_SERVER=No server has been selected. The Web service client will not be deployed, installed, or run.

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_PROJECT_TYPE_EMPTY=Select a service project type.
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_PROJECT_TYPE_EMPTY=Select a client project type.
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 in {1} does not support the service project {2}.
MSG_SERVICE_SERVER_DOES_NOT_SUPPORT_PROJECT=The {0} server does not support the service project {1}.
MSG_SERVICE_SERVER_DOES_NOT_SUPPORT_JAVAPROJECT=The {0} server does not support the Java project {1}.
MSG_SERVICE_RUNTIME_DOES_NOT_SUPPORT_TEMPLATE=The {0} Web service runtime in {1} does not support the service project type {2}.
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 in {1} does not support the client project {2}.
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 in {1} does not support the client project type {2}.
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}, is at an incompatible Java EE specification level than that of the "{1}" Enterprise Application.
MSG_SERVICE_CANNOT_ASSOCIATE=The service project, {0}, is at an incompatible Java EE specification level than that of the "{1}" Enterprise Application.

MSG_PROJECT_MUST_EXIST=No server can be found and {0} does not exist. Choose an existing project or use the preferences to configure a server runtime.  


# 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=Test Web Service
PAGE_DESC_WSTEST=Select a test facility
CHECKBOX_TEST_WEBSERVICE=&Test the Web service
CHECKBOX_MONITOR_WEBSERVICE=&Monitor the Web service
CHECKBOX_OVERWRITE_FILES=&Overwrite files without warning
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.
MSG_ERROR_MODULE_DEPENDENCY=Unable to establish module dependency from {0} to {1}.

#
# 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 project:
TOOLTIP_EAR_PROJECTS=Enterprise application projects.
TOOLTIP_TABLE_BEAN_NAMES=Select an EJB.
LABEL_SHOW_ALL_STATELESS_SESSION_EJBS=<<Show all stateless session EJBs>>

#
# Tooltips for WebServiceWSDLSelectionPage
#
TOOLTIP_PWWS_PAGE=

#
# Tooltips for Web Service Wizard Scenario Page
#
BUTTON_WSWSCEN_PUBLISH=&Publish the Web service
TOOLTIP_WSWSCEN_SCALE_DEVELOP=Develop
TOOLTIP_WSWSCEN_SCALE_ASSEMBLE=Assemble
TOOLTIP_WSWSCEN_SCALE_DEPLOY=Deploy
TOOLTIP_WSWSCEN_SCALE_INSTALL=Install
TOOLTIP_WSWSCEN_SCALE_RUN=Start
TOOLTIP_WSWSCEN_SCALE_TEST=Test
TOOLTIP_WSWSCEN_SCALE_SERVICE=Move the slider to set the level of service generation.
TOOLTIP_WSWSCEN_SCALE_CLIENT=Move the slider to set the level of client generation. Service must be started to enable client generation.
TOOLTIP_WSWSCEN_SCALE_CLIENT_ONLY=Move the slider to set the level of client generation. 
TOOLTIP_WSWSCEN_TEXT_IMPL=Implementation for the web service.
TOOLTIP_WSWSCEN_BUTTON_BROWSE_IMPL=Browse implementation files for specified service type.
TOOLTIP_WSWSCEN_BUTTON_OVERWRITE_FILES=Existing files will be overwritten with no warning during generation.

#
# 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 traffic 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 a URI to a WSDL, WSIL or HTML document.
PAGE_MSG_NO_SUCH_FILE=File "{0}" does not exist.
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 a 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 a 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_COMBOBOX_SERVER=Select the server type.
TOOLTIP_PWSM_COMBOBOX_SERVER_INSTANCE=Select the server instance.
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 References:
LABEL_COMBO_WS_SERVICE_DESC=Service Descriptions:
MSG_TEXT_NUM_OF_SERVICES=You have selected {0} services.
MSG_TEXT_NUM_OF_CLIENTS=You have selected {0} client services.
 
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
PAGE_DESC_MULTIPLE_SERVICES_CONFIG=Add handlers to multiple Web services.
PAGE_DESC_MULTIPLE_CLIENTS_CONFIG=Add handlers to multiple Web service clients.
 
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.
MSG_ERROR_INVALID_MULTIPLE_SERVICE_SELECT=Invalid multiple selection of Services.  Ensure all selections are Services.#

# 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

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

LABEL_BUTTON_STOP_WSDL_VALIDATION=Stop Validation
TOOLTIP_STOP_VALIDATION_BUTTON=Stops the current WSDL validation operation.


#
# Start server page
#
PAGE_TITLE_WS_START_SERVER=Server startup
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

#
# Warnings
#

MSG_SERVER_NOT_FOUND_WARNING=A suitable server was not found. The sample can be generated but cannot be launched.


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

MSG_INFO_WSDL_OPERATION_TIMED_OUT=Could not retrieve the WSDL file {0}.  Do you want to continue to wait for this file?
