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