###############################################################################
# Copyright (c) 2001, 2006 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_CATEGORY=Category
FORM_LABEL_WSDL_All=All
FORM_LABEL_WSDL_SOURCE_WEBPROJECTS=Workspace Projects
FORM_LABEL_WSDL_SOURCE_FAVORITES=Favorites
FORM_LABEL_WEB_PROJECT=Workspace 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

# SessionTimedOut message
MSG_ERROR_SESSION_TIMED_OUT=This session of Web Service Explorer has timed out after 30 minutes of inactivity to free up memory resources.
MSG_ERROR_RESTART_SESSION=Relaunch the Web Service Explorer to test your Web service.

