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


#
#	ActionDialogs Page
#
PREFERENCE_CATEGORY_DIALOGS=Dialogs

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








