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