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

# Navigator
WSIL_MAIN_NODE=WSIL Main

# Forms
FORM_LABEL_URL=URL
FORM_LABEL_ITEM_NUMBER=Item #
FORM_LABEL_UDDI_BUSINESS_NAME=UDDI Business Name
FORM_LABEL_UDDI_SERVICE_NAME=UDDI Service Name
FORM_LABEL_LANGUAGE=Language
FORM_LABEL_ABSTRACT=Abstract
FORM_LABEL_NAME=Name
FORM_LABEL_WSDL_BINDINGS=WSDL Bindings
FORM_LABEL_NAMESPACE_URI=Namespace URI
FORM_LABEL_LOCAL_NAME=Local Name
FORM_LABEL_INQUIRY_API=Inquiry API
FORM_LABEL_SERVICE_KEY=Service Key
FORM_LABEL_BUSINESS_KEY=Business Key
FORM_LABEL_DISCOVERY_URL=Discovery URL
FORM_LABEL_WSIL=WSIL Details
FORM_LABEL_WSIL_LINKS=WSIL Links
FORM_LABEL_WSDL_SERVICE=WSDL Services
FORM_LABEL_UDDI_SERVICE=UDDI Services
FORM_LABEL_UDDI_BUSINESS=UDDI Businesses
FORM_LABEL_ADD_TO_NAVIGATOR=Add To Navigator
FORM_LABEL_ADD_TO_FAVORITES=Add To Favorites
FORM_LABEL_ADD_TO_UDDI_PERSPECTIVE=Add To UDDI Page
FORM_LABEL_ADD_TO_WSDL_PERSPECTIVE=Add To WSDL Page
FORM_LABEL_REFRESH=Refresh
FORM_LABEL_NA=N/A
FORM_LABEL_UNAVAILABLE_UDDI_SERVICE=Service Unavailable:
FORM_LABEL_UNAVAILABLE_UDDI_BUSINESS=Business Unavailable:
FORM_LABEL_CHOOSE_WSIL_INSPECTION_TYPE=Choose the type of objects to inspect:
MSG_ERROR_NOTHING_SELECTED=IWAB0328E Select at least one item.

# OpenWSILAction
ALT_OPEN_WSIL=Open WSIL
FORM_LABEL_OPEN_WSIL_DESC=Enter the URL of a WSIL document or a HTML document and click <strong>Go</strong> to open inspect.
WSIL_URL=URL to document:
MSG_ERROR_INVALID_WSIL_URL=IWAB0394E %1 is not a valid WSIL URL or HTML URL.
MSG_ERROR_WSIL_ALREADY_OPENED=IWAB0329E %1 is already opened in the navigator.
MSG_INFO_OPEN_WSIL_SUCCESSFUL=IWAB0330I %1 was successfully opened.

# OpenWSILLinkAction
ALT_OPEN_WSIL_LINK=Open WSIL Link
MSG_ERROR_WSIL_LINK_ALREADY_OPENED=IWAB0331E %1 is already opened in the navigator
MSG_INFO_OPEN_WSIL_LINK_SUCCESSFUL=IWAB0332I %1 was successfully opened.

# WsilDetailsAction
ALT_WSIL_DETAILS=WSIL Details

# WsilServiceDetailsAction
ALT_WSIL_SERVICE_DETAILS=WSIL Service Details

# UddiLinkDetailsAction
ALT_UDDI_LINK_DETAILS=UDDI Business Details

# WsilLinkDetailsAction
ALT_WSIL_LINK_DETAILS=WSIL Link Details

# ListWSDLServicesAction
ALT_LIST_WSDL_SERVICES=List All WSDL Services
FORM_LABEL_LIST_WSDL_SERVICES_DESC=Select a set of WSDL services and click <strong>Add to Favorites</strong> to add these to the list of favorites.

# ListUDDIServicesAction
ALT_LIST_UDDI_SERVICES=List All UDDI Services
FORM_LABEL_LIST_UDDI_SERVICES_DESC=Select a set of UDDI services and click <strong>Add to Favorites</strong> to add these to the list of favorites. Click <strong>Add to UDDI Page</strong> to add the selections to the UDDI Page. Click <strong>Refresh</strong> to refresh the selections.

# ListUDDIBusinessesAction
ALT_LIST_UDDI_LINKS=List All UDDI Businesses
FORM_LABEL_LIST_UDDI_BUSINESSES_DESC=Select a set of UDDI businesses and click <strong>Add to Favorites</strong> to add these to the list of favorites. Click <strong>Add to UDDI Page</strong> to add these to the UDDI Page. Click <strong>Refresh</strong> to refresh the selections.

# ListWSILLinksAction
ALT_LIST_WSIL_LINKS=List All WSIL Links
FORM_LABEL_LIST_WSIL_LINKS=Select a set of WSIL links and press <strong>Add to Navigator</strong> to open them in the navigator.

# ClearWSILAction
ALT_CLEAR_WSIL=Clear WSIL

# RefreshAction
ALT_REFRESH_WSIL=Refresh WSIL
ALT_REFRESH_UDDI_BUSINESS=Refresh UDDI Business
ALT_REFRESH_UDDI_SERVICE=Refresh UDDI Service
MSG_ERROR_WSIL_NOT_FOUND=IWAB0333E WSIL %1 could not be loaded.
MSG_ERROR_BUSINESS_NOT_FOUND=IWAB0334E Business %1 could not be found in the registry.
MSG_ERROR_SERVICE_NOT_FOUND=IWAB0335E Service %1 could not be found in the registry.
MSG_INFO_REFRESH_SUCCESSFUL=IWAB0336I %1 is refreshed.
MSG_CONFIRM_REMOVE_NODE=%1 is no longer resolvable.  Do you wish to clear it?

# AddToUDDIPerspectiveAction
ALT_ADD_BUSINESS_TO_UDDI_PERSPECTIVE=Add Business To UDDI Page
ALT_ADD_SERVICE_TO_UDDI_PERSPECTIVE=Add Service To UDDI Page
MSG_INFO_ADD_TO_UDDI_PERSPECTIVE_SUCCESSFUL=IWAB0337I %1 is added to UDDI Page.
MSG_ERROR_ADD_TO_UDDI_PERSPECTIVE=IWAB0338E Unable to add %1 to UDDI Page.
MSG_ERROR_BUSINESS_NOT_FOUND=IWAB0339E Business %1 could not be found in the registry.
MSG_ERROR_SERVICE_NOT_FOUND=IWAB0340E Service %1 could not be found in the registry.

# WsilAddToWSDLPerspectiveAction
ALT_ADD_WSDL_TO_WSDL_PERSPECTIVE=Add WSDL To WSDL Page
MSG_INFO_ADD_WSDL_TO_WSDL_PERSPECTIVE_SUCCESSFUL=IWAB0395I %1 is added to WSDL Page.
MSG_ERROR_ADD_WSDL_TO_WSDL_PERSPECTIVE=IWAB0396E %1 could not be loaded.

# AddWSILToFavoritesAction
ALT_ADD_WSIL_TO_FAVORITES=Add WSIL To Favorites
MSG_ERROR_ADD_TO_FAVORITES=IWAB0341E Unable to add %1 to favorites.
MSG_ERROR_FAVORITES_ALREADY_EXISTS=IWAB0342E %1 already exists in favorites.
MSG_INFO_ADD_TO_FAVORITES_SUCCESSFUL=IWAB0343I %1 is added to favorites.
MSG_QUESTION_OVERWRITE_FAVORITES=Favorite already exists.  Do you wish to overwrite?

# AddWSDLServiceToFavoritesAction
ALT_ADD_WSDL_SERVICE_TO_FAVORITES=Add WSDL To Favorites

# AddBusinessToFavoritesAction
ALT_ADD_UDDI_BUSINESS_TO_FAVORITES=Add UDDI Business To Favorites

# AddServiceToFavoritesAction
ALT_ADD_SERVICE_TO_FAVORITES=Add UDDI Service To Favorites

# WSILImportWSILToWorkbench
ATL_IMPORT_WSIL_TO_WORKBENCH=Import WSIL To Workbench
FORM_LABEL_IMPORT_WSIL_TO_WORKBENCH_DESC=Select a workbench project to save the WSIL file into. You may also change the name of the WSIL file.

# ImportToFileSystemAction
ALT_WSIL_IMPORT_TO_FS=Import WSIL To File System
ALT_WSDL_IMPORT_TO_FS=Import WSDL To File System

# 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_CONTENT=Properties Content
FRAME_TITLE_PROPERTIES_TOOLBAR=Properties Toolbar
FRAME_TITLE_STATUS_CONTAINER=Status Container
FRAME_TITLE_STATUS_CONTENT=Status Content
FRAME_TITLE_STATUS_TOOLBAR=Status Toolbar

# Form titles
FORM_TITLE_OPEN_WSIL=Open WSIL Form
FORM_TITLE_UDDI_BUSINESS_DETAILS=UDDI Business Details Form
FORM_TITLE_UDDI_SERVICE_DETAILS=UDDI Service Details Form
FORM_TITLE_WSDL_SERVICE_DETAILS=WSDL Service Details Form
FORM_TITLE_WSIL_DETAILS=WSIL Details Form
FORM_TITLE_WSIL_LINK_DETAILS=WSIL Link Details Form

# View titles
VIEW_TITLE_UDDI_BUSINESSES=UDDI Businesses View
VIEW_TITLE_UDDI_SERVICES=UDDI Services View
VIEW_TITLE_WSDL_SERVICES=WSDL Services View
VIEW_TITLE_WSIL_LINKS=WSIL Links View
