###############################################################################
# Copyright (c) 2001, 2010 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
###############################################################################
_UI_TAB_GRAPH=Design
_UI_TAB_SOURCE=Source
_UI_BUTTON_NEW=New...
_UI_LABEL_READ_ONLY=read-only
_UI_LABEL_NAMESPACE=&Namespace:
_UI_LABEL_PORTTYPE=Port&Type:
_UI_LABEL_LOCATION=&Location:
_UI_LABEL_ADDRESS=&Address
_UI_LABEL_BINDING=Binding
_UI_LABEL_BINDING_IN_PROPERTIES_SECTION=&Binding:
_UI_LABEL_PREFIX=Prefi&x:
_UI_LABEL_NAME=&Name:
_UI_LABEL_TYPE=&Type:
_UI_ACTION_ADD_SERVICE=Add &Service
_UI_ACTION_ADD_MESSAGE=Add &Message
_UI_ACTION_ADD_OPERATION=Add Op&eration
_UI_ACTION_ADD_IMPORT=Add I&mport
_UI_ACTION_UPDATE_IMPORT=&Update Import
_UI_ACTION_ADD_OUTPUT=Add O&utput
_UI_ACTION_ADD_FAULT=Add &Fault
_UI_ACTION_ADD_PORT=Add &Port
_UI_ACTION_ADD_PORTTYPE=Add Port&Type
_UI_ACTION_DELETE=&Delete
_UI_BUTTON_BROWSE=Browse...
_UI_ACTION_NEW_PORTTYPE=&New PortType...
_UI_ACTION_NEW_BINDING=&New Binding...
_UI_ACTION_EXISTING_PORTTYPE=&Existing PortType...
_UI_GENERATE_BINDING_CONTENT=&Generate Binding Content...
_UI_ACTION_EXISTING_BINDING=&Existing Binding...
_UI_LABEL_BINDING_PROTOCOL=&Protocol
_UI_LABEL_TARGET_NAMESPACE=&Target namespace:
_UI_ACTION_ADD_BINDING=Add &Binding
_UI_ACTION_ADD_SCHEMA=Add &Schema
_UI_ACTION_ADD_INPUT=Add &Input
_UI_SECTION_ADVANCED_ATTRIBUTES=&Advanced

_UI_ACTION_EDIT_NAMESPACES = Edit Namespaces...
_UI_ACTION_OPEN_SCHEMA=&Open Schema
_UI_TOOLTIP_RENAME_REFACTOR=Click here to invoke the Rename refactoring.

_UI_LABEL_RIGHT_CLICK_TO_INSERT_CONTENT=Right mouse click here to insert content
_UI_ACTION_SHOW_PROPERTIES=Sho&w properties
_ERROR_LABEL_PREFIX_EXISTS=Prefix already exists
_UI_REFACTOR_CONTEXT_MENU=Refac&tor