###############################################################################
# Copyright (c) 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 Graphical User Interface
PLUGIN_VENDOR=International Business Machines Corp.
PLUGIN_DESC=\
The Web services GUI plugin delivers the graphical \
user interface to the Web services function of the \
Web services plugin.

PLUGIN_NEW_CATEGORY_NAME_WS=Web Services

#
#	Web Services Preferance Pages
#
# Categories
PREFERENCE_CATEGORY_RESOURCE_MANAGEMENT=Resource Management
PREFERENCE_CATEGORY_CODE_GENERATION=Code Generation
PREFERENCE_CATEGORY_SCENARIO_DEFAULTS=Scenario Defaults
PREFERENCE_CATEGORY_PROJECT_TOPOLOGY=Project Topology
PREFERENCE_CATEGORY_DRIVER_JARS=JDBC drivers


#
#Scenario Defaults
BUTTON_LAUNCH_SAMPLE=Launch the sample when generated
LABEL_UDDI_CAT_DATA_COLUMN_DELIM=User defined UDDI Category data column delimiter:
LABEL_UDDI_CAT_DATA_STRING_DELIM=User defined UDDI Category data string delimiter:
MSG_ERROR_COLUMN_STRING_DELIMS_IDENTICAL=IWAB0481E UDDI column and string delimiters must not be identical.
LABEL_MOVE_UP=Move up
LABEL_MOVE_DOWN=Move down

#
# Preferences Tooltips
#

#Scenario Defaults
TOOLTIP_PPSD_PAGE=Set the defaults for the Web service scenarios.
TOOLTIP_PPSD_CHECKBOX_LAUNCH_SAMPLE=Launch the sample application after generation.
TOOLTIP_PPSD_COMBO_SAMPLE_GEN=Select the type of sample JSP to be generated.
TOOLTIP_PPSD_COMBO_EXPLORER=Select the type of the Web services explorer to be used.
TOOLTIP_PPSD_UDDI_CAT_DATA_COLUMN_DELIM=column delimiter for user defined UDDI category data
TOOLTIP_PPSD_UDDI_CAT_DATA_STRING_DELIM=string delimiter for user defined UDDI category data
TOOLTIP_CLIENT_TYPE_TABLE_VIEWER=Preferred order of the list of client types
TOOLTIP_MOVE_UP=Move the selected client type up the list
TOOLTIP_MOVE_DOWN=Move the selected client type down the list

#
# Resource Managment
TOOLTIP_PPRM_PAGE=Set preferences that control resources used/generated by the Web service.
TOOLTIP_PPRM_CHECKBOX_OVERWRITE_FILES=Overwrite files without warning.
TOOLTIP_PPRM_CHECKBOX_CREATE_FOLDERS=Create folders when necessary.
TOOLTIP_PPRM_CHECKBOX_CHECK_OUT=Check out files without warning.
BUTTON_CREATE_FOLDERS=Create folders when necessary
BUTTON_OVERWRITE_FILES=Overwrite files without warning
BUTTON_CHECKOUT_FILES=Check out files without warning

#
# General messages.
#
ISTATUS_WITHOUT_EXCEPTION={0}
ISTATUS_WITH_EXCEPTION={0}\nException: {1}
MSG_INFO_SAVED_STATUS=IWAB0297I Press the Details button to see informational messages.

#
# TypeSelectionDialog
#
DIALOG_TITLE_CLASS_BROWSE=Browse Classes
DIALOG_TITLE_INTERFACE_BROWSE=Browse Interfaces

#
# Common wizard strings.
#
LABEL_WSEXPLORER_TYPES=Web Services Explorer
LABEL_SAMPLE_TYPES=Java proxy sample

#
# ResourceSelectionDialog
#
DIALOG_TITLE_RESOURCE_BROWSE=Browse Files
LABEL_RESOURCE_FILTER=Filter:

#
# Tooltips for dialog.ResourceSelectionDialog
# DRES=Dialog/RESources
#
TOOLTIP_DRES_COMBO_RESOURCE_TYPE=Type of resources to browse.
TOOLTIP_DRES_TREE_RESOURCE=Resources available for selection.



#
# HTTP Basic Authentication
#
PREFERENCE_CATEGORY_HTTP_BASIC_AUTH=HTTP Basic Auth
CHECKBOX_PREFERENCE_ENABLE_HTTP_BASIC_AUTH=Enable HTTP basic authentication
LABEL_PREFERENCE_HTTP_BASIC_AUTH_USERNAME=HTTP basic auth user name:
LABEL_PREFERENCE_HTTP_BASIC_AUTH_PASSWORD=HTTP basic auth password:

TOOLTIP_ENABLE_HTTP_BASIC_AUTH=Specify HTTP basic authentication setting for Web services toolings.
TOOLTIP_HTTP_BASIC_AUTH_USERNAME=User name for HTTP basic authentication.
TOOLTIP_HTTP_BASIC_AUTH_PASSWORD=Password for HTTP basic authentication.


#
# Messages for project topology preference page
#
TOOLTIP_PTPP_PAGE=Preference that control the project topology of your Web service and client scenarios.
TOOLTIP_ENABLE_TWO_EARS=Enable this option if you want to generate your Web service and Web service client in different EAR projects.

LABEL_ENABLE_TWO_EARS=Generate Web service and Web service client in different EAR projects
LABEL_CLIENT_TYPE_NAME=Client type:

#
#  WS-I Preference pages
#
# WS-I Compliance Page
#
PREFERENCE_CATEGORY_WSI=WS-I Compliance
STOP_NON_WSI=Require compliance
WARN_NON_WSI=Suggest compliance
IGNORE_NON_WSI=Ignore compliance
FOLLOW_WSI_PREFERENCE=Follow Preference

TOOLTIP_PWSI_PAGE=Web Services Interoperability
TOOLTIP_PWSI_RADIO_STOP_NON_WSI=Stop and produce an error message if you make a choice that does not comply with WS-I.
TOOLTIP_PWSI_RADIO_WARNING_NON_WSI=Produce a warning message if you make a choice that does not comply with WS-I.
TOOLTIP_PWSI_RADIO_IGNORE_NON_WSI=Silently allow choices that do not comply with WS-I.
TOOLTIP_PWSI_RADIO_FOLLOW_WSI_PREFERENCE=Project would use WS-I compliance level set in Workspace Preference.

LABEL_WSI_SSBP=WS-I SSBP compliance level
TOOLTIP_PWSI_SSBP_LABEL=WS-I Simple SOAP Binding Profile compliance level
TOOLTIP_PWSI_SSBP_COMBO=Choose the WS-I Simple SOAP Binding Profile compliance level

LABEL_WSI_AP=WS-I AP compliance level
TOOLTIP_PWSI_AP_LABEL=WS-I Attachment Profile compliance level
TOOLTIP_PWSI_AP_COMBO=Choose the WS-I Attachment Profile compliance level

#
#	ActionDialogs Page
#
PREFERENCE_CATEGORY_DIALOGS=Dialogs


#
#	WS-I Compliance Messages
#
WSI_SSBP_ERROR=You have made a choice that may result in a Web service that does not comply with the WS-I Simple SOAP Binding Profile. Your current Web services preference is set to require compliance with WS-I SSBP.
WSI_SSBP_WARNING=You have made a choice that may result in a Web service that does not comply with the WS-I Simple SOAP Binding Profile. Do you wish to ignore this warning and continue?
WSI_SSBP_INCOMPLIANT_RUNTIME=The selected Web Service runtime does not comply with the WS-I Simple SOAP Binding Profile.
WSI_AP_ERROR=You have made a choice that may result in a Web service that does not comply with the WS-I Attachment Profile. Your current Web services preference is set to require compliance with WS-I AP.
WSI_AP_WARNING=You have made a choice that may result in a Web service that does not comply with the WS-I Attachment Profile. Do you wish to ignore this warning and continue?
WSI_AP_INCOMPLIANT_RUNTIME=The selected Web Service runtime does not comply with the WS-I Attachment Profile.
IGNORE_LABEL=Ignore
IGNORE_DESCRIPTION=Ignore the WS-I non-compliance and continue
IGNORE_ALL_LABEL=Ignore All
IGNORE_ALL_DESCRIPTION=Always ignore the WS-I non-compliance and continue
CANCEL_LABEL=Cancel
TASK_LABEL_WSI_NONCOMPLIANT=Check for WSI Compliance
TASK_DESC_WSI_NONCOMPLIANT=Check for WSI Compliance
CANCEL_DESCRIPTION=Cancel
NOT_OK=Cannot continue due to WS-I non-compliance

#
# Resource Browser
#
DIALOG_TITLE_RESOURCE_BROWSER=Resource browser
TOOLTIP_RESOURCE_TREE=Choose a resource.








