###############################################################################
# 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_WSEXPLORER=Web Services Explorer

# Tree Nodes
ALT_OPEN=Open
ALT_CLOSE=Close

# Perspective Toolbar
ALT_BACK=Back
ALT_FORWARD=Forward
ALT_ACTION_ENGINE=Action Recorder
ALT_UDDI_PERSPECTIVE=UDDI Page
ALT_WSIL_PERSPECTIVE=WSIL Page
ALT_WSDL_PERSPECTIVE=WSDL Page
ALT_FAVORITES_PERSPECTIVE=Favorites

# Toolbars
ALT_DOUBLE_CLICK_TO_MAXIMIZE=Double Click to Maximize
ALT_DOUBLE_CLICK_TO_RESTORE=Double Click to Restore

# SetDefaultViewTool
ALT_BACK_TO_TOP=Back to top

# Common Actions
ALT_REFRESH=Refresh
ALT_CLEAR=Clear
ALT_RESULTS=Results

# Common Labels
ALT_NAVIGATOR=Navigator
ALT_ACTIONS=Actions
ALT_STATUS=Status
ALT_OTHER_ACTIONS=Other Actions
FORM_BUTTON_GO=&nbsp;&nbsp;Go&nbsp;&nbsp;
FORM_BUTTON_RESET=Reset
FORM_BUTTON_CANCEL=Cancel
FORM_LABEL_ACTIONS=Actions
FORM_LABEL_ACTIONS_NONE=None

# Placeholder for blank table entries
TABLE_BLANK_PLACEHOLDER=--

# Common Form Control Titles
FORM_CONTROL_TITLE_SELECT_ALL_CHECK_BOX=Select all
FORM_CONTROL_TITLE_SELECT_ROW_CHECK_BOX=Select row

# Common Messages
MSG_ERROR_UNEXPECTED=IWAB0135E An unexpected error has occurred.
MSG_ERROR_NO_ACTION_SELECTED=IWAB0124E Select an action.
MSG_ERROR_NO_NODE_SELECTED=IWAB0125E Select a node.
MSG_SUBMIT_IN_PROGRESS=Please wait. The operation is still in progress.
MSG_LOAD_IN_PROGRESS=Please wait while the form loads...

#LaunchWebServiceWizardAction
ALT_LAUNCH_WEB_SERVICE_WIZARD=Launch Web Service Wizard
FORM_LABEL_CHOOSE_WIZARD=Select a wizard to launch:
FORM_RADIO_WEB_SERVICE_CLIENT_WIZARD=Web Service Client
FORM_RADIO_WEB_SERVICE_SKELETON_WIZARD=Web Service Skeleton
MSG_ERROR_WIZARD_ALREADY_RUNNING=IWAB0126E A Web service wizard is already in progress.  Finish with the existing wizard before launching a new one.
MSG_ERROR_WSDL_URL_IS_UNREACHABLE=IWAB0127E The WSDL document is unreachable.

# ImportToFileSystemAction
ALT_WSIL_IMPORT_TO_FS=Import WSIL To File System
ALT_WSDL_IMPORT_TO_FS=Import WSDL To File System
MSG_ERROR_RETRIEVING_WSDL_DOC=IWAB0128E Unable to retrieve WSDL document.
MSG_ERROR_RETRIEVING_WSIL_DOC=IWAB0129E Unable to retrieve WSIL document.
MSG_IMPORT_WSDL_SUCCESSFUL=WSDL document successfully imported.
MSG_IMPORT_WSIL_SUCCESSFUL=WSIL document successfully imported.

# ImportToWorkbenchAction
ALT_IMPORT_WSDL_TO_WORKBENCH=Import WSDL To workbench
FORM_LABEL_IMPORT_TO_WORKBENCH_DESC=Select a workbench project to save the WSDL file into. You may also change the name of the WSDL file.
WEB_PROJECT_NAME=Web project:
WORKBENCH_PROJECT_NAME=Workbench project:
LABEL_IMPORT_WSDL=Import WSDL document
LABEL_IMPORT_TO_WSIL=Import as a service reference to a WSIL document
IMPORTED_WSDL_FILE_NAME=WSDL file name:
WSIL_FILE_NAME=WSIL file name:
MSG_ERROR_FILE_OVERWRITE_DISABLED=Cannot create the file "%2" relative to the path "%1" because automatic file overwriting has not been enabled. Do you want to enable it for this file?
MSG_ERROR_INVALID_WORKBENCH_PROJECT=IWAB0130E Select a workbench project.
MSG_ERROR_INVALID_WSDL_FILE_NAME=IWAB0131E Invalid file name.
MSG_ERROR_INVALID_WSIL_FILE_NAME=IWAB0470E Invalid WSIL file name.
MSG_ERROR_NO_IMPORT_OPTION_SELECTED=IWAB0471E No import option is selected.  Please choose at least one import option.
MSG_ERROR_WRITING_TEMP_FILE_TO_FS=IWAB0132E Unable to write temporary file.
MSG_INFO_IMPORT_TO_WORKBENCH_SUCCESSFUL=IWAB0314I %1 was successfully imported to the workbench.
MSG_INFO_IMPORT_SERVICE_REF_TO_WSIL_SUCCESSFUL=IWAB0472I Service reference was successfully imported to %1.

# CheckWorkbenchFileReadOnlyAction
MSG_ERROR_FILE_CHECKOUT_DISABLED=Cannot create the file "%2" relative to the path "%1" because automatic file check out has not been enabled. Do you want to enable it for this file?

# ClearNodeAction
MSG_INFO_NODE_CLEARED=IWAB0133I %1 cleared.

# Table twistees
ALT_TWIST_OPENED=Hide
ALT_TWIST_CLOSED=Expand

# WSDL Browser
FORM_LINK_BROWSE=Browse...
TITLE_WSDL_BROWSER=WSDL Browser - %1
FORM_LABEL_WSDL_SOURCE=Select a WSDL source:
FORM_LABEL_WSDL_SOURCE_WEBPROJECTS=Web Projects
FORM_LABEL_WSDL_SOURCE_FAVORITES=Favorites
FORM_LABEL_WEB_PROJECT=Web Project
FORM_LABEL_WSDL_URL=WSDL URL
FORM_BUTTON_REFRESH=Refresh
ALT_WSDL_BROWSER=WSDL Browser
WSDL_TYPE_SERVICE_INTERFACES=Service Interfaces
WSDL_TYPE_SERVICES=Services

# Calendar Browser
TITLE_CALENDAR_BROWSER=Calendar Browser
# 2 character abbreviations for days of the week.
FORM_LABEL_SH_SUNDAY=Su
FORM_LABEL_SH_MONDAY=Mo
FORM_LABEL_SH_TUESDAY=Tu
FORM_LABEL_SH_WEDNESDAY=We
FORM_LABEL_SH_THURSDAY=Th
FORM_LABEL_SH_FRIDAY=Fr
FORM_LABEL_SH_SATURDAY=Sa
# Months of the year
FORM_LABEL_MONTH=Month:
FORM_LABEL_JANUARY=January
FORM_LABEL_FEBRUARY=February
FORM_LABEL_MARCH=March
FORM_LABEL_APRIL=April
FORM_LABEL_MAY=May
FORM_LABEL_JUNE=June
FORM_LABEL_JULY=July
FORM_LABEL_AUGUST=August
FORM_LABEL_SEPTEMBER=September
FORM_LABEL_OCTOBER=October
FORM_LABEL_NOVEMBER=November
FORM_LABEL_DECEMBER=December
FORM_LABEL_YEAR=Year:
FORM_LABEL_TIME=Time:
FORM_LINK_TODAY=Today
FORM_LINK_PREVIOUS_YEAR=<<
FORM_LINK_PREVIOUS_MONTH=<
FORM_LINK_NEXT_MONTH=>
FORM_LINK_NEXT_YEAR=>>
ALT_PREVIOUS_YEAR=Previous Year
ALT_PREVIOUS_MONTH=Previous Month
ALT_NEXT_MONTH=Next Month
ALT_NEXT_YEAR=Next Year
ALT_TODAY=Today
ALT_CALENDAR_BROWSER=Calendar Browser
MSG_ERROR_INVALID_TIME_FORMAT=IWAB0368E Time was not formatted as HH:MM:SS[.SSS]. Do you wish to use the current time instead?

# Action engine
TITLE_ACTION_RECORDER=Action Recorder
FORM_LABEL_MODE=Mode:
FORM_LABEL_MODE_PLAY=Play
FORM_LABEL_MODE_STOP=Stop
FORM_LABEL_MODE_RECORD=Record
FORM_LABEL_SAVE=Save
FORM_LABEL_PLAY_FILE=Play file:
MSG_ERROR_INVALID_PLAY_FILE=IWAB0362E Enter a play file.

# Frame titles
FRAME_TITLE_PERSPECTIVE_WORKAREA=Web Services Explorer Internal Work Area
FRAME_TITLE_PERSPECTIVE_TOOLBAR=Web Services Explorer Toolbar
FRAME_TITLE_PERSPECTIVE_CONTENT=Web Services Explorer Page Content
FRAME_TITLE_WSDL_TOOLBAR=WSDL Browser Toolbar
FRAME_TITLE_WSDL_CONTENT=WSDL Browser Content

# Form titles
FORM_TITLE_PAGE_LOADER=Page Loader
FORM_TITLE_PAGE_CONTENT=Loaded Page Content
FORM_TITLE_LAUNCH_WEBSERVICE_WIZARD=Launch Web Service Wizard Form
FORM_TITLE_IMPORT_TO_WORKBENCH=Import to Workbench Form
