###############################################################################
# Copyright (c) 2004, 2008 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
###############################################################################

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

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 projects
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_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?
