###############################################################################
# Copyright (c) 2001, 2007 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
FORM_LABEL_HEADER=Header
FORM_LABEL_BODY=Body
FORM_LABEL_MUSTUNDERSTAND=mustUnderstand
FORM_LABEL_ACTOR=actor

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