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

title=WSDL

# Nodes
NODE_NAME_WSDL_MAIN=WSDL Main

# Frame titles
FRAME_TITLE_NAVIGATOR_CONTAINER=Navigator Container
FRAME_TITLE_NAVIGATOR_TOOLBAR=Navigator Toolbar
FRAME_TITLE_NAVIGATOR_CONTENT=Navigator Content
FRAME_TITLE_ACTIONS_CONTAINER=Actions Container
FRAME_TITLE_PROPERTIES_CONTAINER=Properties Container
FRAME_TITLE_PROPERTIES_TOOLBAR=Properties Toolbar
FRAME_TITLE_PROPERTIES_CONTENT=Properties Content
FRAME_TITLE_STATUS_CONTAINER=Status Container
FRAME_TITLE_STATUS_TOOLBAR=Status Toolbar
FRAME_TITLE_STATUS_CONTENT=Status Content
FRAME_TITLE_WSDL_PERSPECTIVE_CONTENT=WSDL Page Content
FRAME_TITLE_XSD_INFORMATION_TOOLBAR=XSD Information Dialog Toolbar
FRAME_TITLE_XSD_INFORMATION_CONTENT=XSD Information Dialog Content

# OpenWSDLAction
ALT_OPEN_WSDL=Open WSDL
MSG_ERROR_INVALID_WSDL_URL=IWAB0378E Enter a valid WSDL URL.
MSG_ERROR_OPEN_WSDL=IWAB0379E Unable to open %1.
MSG_ERROR_XSD_VALIDATION=IWAB0380E Errors were encountered while validating XML schemas.
MSG_INFO_OPEN_WSDL_SUCCESSFUL=IWAB0381I %1 was successfully opened.

# WSDL Element details
ALT_WSDL_DETAILS=WSDL Details
FORM_LABEL_WSDL_DETAILS_DESC=Shown below are the details for this WSDL document. Click on a service or binding to see its details.

# WSDL Service Element details
ALT_WSDL_SERVICE_DETAILS=WSDL Service Details
FORM_LABEL_SERVICE_DETAILS_DESC=Shown below are the details for this &lt;service&gt; element. Click on a binding to see its operations.

ALT_NIL=nil?

# WSDL Binding Element details
ALT_WSDL_BINDING_DETAILS=WSDL Binding Details
FORM_LABEL_BINDING_DETAILS_DESC=Shown below are the details for this <strong>%1</strong>  &lt;binding&gt; element. Click on an operation to fill in its parameters and invoke it or specify additional endpoints.

# InvokeWSDLOperationAction
ALT_INVOKE_WSDL_OPERATION=Invoke a WSDL Operation
MSG_ERROR_UNABLE_TO_CONNECT=IWAB0382E Unable to connect to %1
MSG_ERROR_VALIDATING_PARAMETER=IWAB0383E Error validating %1

# WSDLAddToFavoritesAction
ALT_ADD_WSDL_TO_FAVORITES=Add WSDL To Favorites
MSG_ERROR_FAVORITES_ALREADY_EXISTS=IWAB0384E %1 already exists in favorites.
MSG_ERROR_ADD_TO_FAVORITES=IWAB0385E Unable to add %1 to favorites.
MSG_INFO_ADD_TO_FAVORITES_SUCCESSFUL=IWAB0386I %1 is added to favorites.
MSG_QUESTION_OVERWRITE_FAVORITES=Favorite already exists.  Do you wish to overwrite?

# RefreshWSDLAction
MSG_INFO_REFRESH_WSDL_SUCCESSFUL=IWAB0387I %1 is refreshed.
MSG_QUESTION_REMOVE_WSDL_NODE=%1 is no longer resolvable.  Do you wish to clear it?

# UpdateWSDLBindingAction
MSG_INFO_UPDATE_WSDL_BINDING_SUCCESSFUL=IWAB0388I Endpoints were successfully updated.

# Form titles
FORM_TITLE_OPEN_WSDL=Open WSDL Form
FORM_TITLE_WSDL_DETAILS=WSDL Details Form
FORM_TITLE_WSDL_SERVICE_DETAILS=WSDL Service Details Form
FORM_TITLE_WSDL_BINDING_DETAILS=WSDL Binding Details Form
FORM_TITLE_INVOKE_WSDL_OPERATION=WSDL Operation Form

# Form Labels
FORM_LABEL_OPEN_WSDL_DESC=Enter the URL of a WSDL document and click <strong>Go</strong> to explore.
FORM_LABEL_SERVICES=Services
FORM_LABEL_BINDINGS=Bindings
FORM_LABEL_OPERATIONS=Operations
FORM_LABEL_BINDING_TYPE=Type
FORM_LABEL_BINDING_TYPE_UNSUPPORTED=Unsupported
FORM_LABEL_BINDING_TYPE_SOAP=SOAP
FORM_LABEL_BINDING_TYPE_HTTP_GET=HTTP GET
FORM_LABEL_BINDING_TYPE_HTTP_POST=HTTP POST
FORM_LABEL_NAME=Name
FORM_LABEL_DOCUMENTATION=Documentation
FORM_LABEL_ENDPOINT=Endpoint
FORM_LABEL_INVOKE_WSDL_OPERATION_DESC=Enter the parameters of this WSDL operation and click <strong>Go</Strong> to invoke.
FORM_LABEL_INVOKE_WSDL_OPERATION_DESC_NO_INPUT=There are no input parameters for the WSDL operation "%1". Click <strong>Go</Strong> to invoke.
FORM_LINK_ADD=Add
FORM_LINK_REMOVE=Remove
FORM_LABEL_VALUES=Values
FORM_LABEL_ENABLE_DISABLE_GROUP=Enable/Disable group
FORM_LABEL_UNION_TYPE=Union types
FORM_LABEL_LANGUAGE=Language
FORM_LABEL_XSD_APPLICATION_INFORMATION=Application Information
FORM_LABEL_XSD_DOCUMENTATION=Documentation
FORM_LABEL_SOAP_REQUEST_ENVELOPE=SOAP Request Envelope:
FORM_LABEL_SOAP_RESPONSE_ENVELOPE=SOAP Response Envelope:
FORM_LABEL_GROUP_ALL_ORDERING_MOVE_UP=Move element up
FORM_LABEL_GROUP_ALL_ORDERING_MOVE_DOWN=Move element down
FORM_LABEL_BASE_TYPE=Base type
FORM_LABEL_UNBOUNDED=Unbounded
FORM_LABEL_LENGTH=Length
FORM_LABEL_LENGTH_VALUE=[%1..%2]
FORM_LABEL_PATTERN=Pattern
FORM_LABEL_WHITESPACE=Whitespace
FORM_LABEL_RANGE_OF_VALUES=Range of values
FORM_LABEL_MIN_EXCLUSIVE=(%1..
FORM_LABEL_MIN_INCLUSIVE=[%1..
FORM_LABEL_MAX_EXCLUSIVE=%1)
FORM_LABEL_MAX_INCLUSIVE=%1]
FORM_LABEL_TOTAL_DIGITS=Total digits
FORM_LABEL_FRACTION_DIGITS=Fraction digits
FORM_LABEL_OCCURANCE=Occurance of
FORM_LABEL_UNION_MEMBERS=Union Members
FORM_LABEL_LIST_ITEMS=List items
FORM_LABEL_ELEMENTS=Elements
FORM_LABEL_SOAP_ENC_ARRAYS=SOAP Arrays
FORM_LABEL_CONTENT=Content
FORM_LABEL_ATOMIC_NAME_TYPE=%1 (%2):
FORM_LABEL_NULL=null
FORM_LABEL_GROUP_NUMBER=Group %1
FORM_LABEL_CHOICES=Choices
FORM_LABEL_NOTHING_TO_DISPLAY_IN_FORM_VIEW=There is nothing to be displayed in the form view.  Please switch to the source view for the SOAP request and response.
FORM_LABEL_SOAP_RESPONSE_FAILED_VALIDATION_IN_FORM_VIEW=The SOAP response failed schema validation.  Please switch to the source view for the SOAP response in XML format.
FORM_LABEL_END_POINTS=Endpoints

# Source/Form views
FORM_LINK_FORM=Form
ALT_SWITCH_TO_FORM_VIEW=Switch to form view
FORM_LINK_SOURCE=Source
ALT_SWITCH_TO_SOURCE_VIEW=Switch to source view
FORM_LABEL_FRAGMENT_SOAP_VIEW_CONTENT=Soap Body:
BUTTON_LABEL_LOAD=Load
BUTTON_LABEL_SAVE_AS=Save As...
MSG_QUESTION_SYNC_VIEWS=Format of the source content may be altered as a result of switching to the form view.  Do you wish to process?
MSG_QUESTION_SYNC_VIEWS_DESPITE_INVALID_SOURCE_CONTENT=Content of the source view failed schema validation.  Synchronize anyways?  (Content of the source view may be modified)

# Form control titles
FORM_CONTROL_TITLE_ENABLE_DISABLE_GROUP=Enable/Disable group
FORM_CONTROL_TITLE_SELECT_ELEMENT_IN_GROUP=Select element in group
FORM_CONTROL_TITLE_SELECT_UNION_TYPE=Select union type
FORM_CONTROL_TITLE_SOAP_FILE=SOAP data file

# XSD Information Dialog
TITLE_XSD_INFORMATION_DIALOG=XSD Information Dialog

# Error messages
MSG_ERROR_NOTHING_SELECTED=IWAB0389E Select at least one item.
MSG_ERROR_MAX_OCCURS_VIOLATION=IWAB0390E Maximum occurance is reached.
MSG_ERROR_MIN_OCCURS_VIOLATION=IWAB0391E Minimum occurance is reached.
MSG_ERROR_CANNOT_MOVE_FIRST_ELEMENT_UP=IWAB0392E Selected element is already the first in the group.
MSG_ERROR_CANNOT_MOVE_LAST_ELEMENT_DOWN=IWAB0393E Selected element is already the last in the group.
