######################################################################
# Copyright (c) 2000, 2002 IBM Corp. and others.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Common Public License v0.5
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/cpl-v05.html
#
# Contributors:
#    IBM Corporation - Initial implementation
######################################################################

ChangeVariableValue.errorDialogMessage=Setting the variable value failed.
ChangeVariableValue.errorDialogTitle=Setting variable value
ChangeVariableValue.title=&Change Variable Value
ChangeVariableValue.toolTipText=Changes the Value of a Simple Type Variable

ClearOutputAction.title=Clea&r
ClearOutputAction.toolTipText=Clear Console

CopyToClipboardActionDelegate.Problem_Copying_to_Clipboard_1=Problem Copying to Clipboard
CopyToClipboardActionDelegate.There_was_a_problem_when_accessing_the_system_clipboard._Retry__2=There was a problem when accessing the system clipboard. Retry?

DisconnectActionDelegate.Disconnect_3=Disconnect
DisconnectActionDelegate.Disconnect_failed_1=Disconnect failed
DisconnectActionDelegate.Exceptions_occurred_attempting_to_disconnect._2=Exceptions occurred attempting to disconnect.

EnableBreakpointAction.Enable_breakpoint(s)_failed_2=Enable/Disable breakpoint(s) failed
EnableBreakpointAction.Enabling_breakpoints_3=Enabling/disabling breakpoints
EnableBreakpointAction.Exceptions_occurred_enabling_the_breakpoint(s)._4=Exceptions occurred enabling/disabling the breakpoint(s).

OpenBreakpointMarkerAction.&Go_to_File_1=&Go to File
OpenBreakpointMarkerAction.Exceptions_occurred_attempting_to_open_the_editor_for_the_breakpoint_resource_2=Exceptions occurred attempting to open the editor for the breakpoint resource
OpenBreakpointMarkerAction.Go_to_Breakpoint_1=Go to File
OpenBreakpointMarkerAction.Go_to_File_for_Breakpoint_2=Go to File for Breakpoint

RelaunchActionDelegate.An_exception_occurred_while_launching_2=An exception occurred while launching
RelaunchActionDelegate.Launch_Failed_1=Launch Failed
RelaunchActionDelegate.Launch_1=Launch

RemoveAllBreakpointsAction.Breakpoint(s)_removal_failed_3=Breakpoint(s) removal failed
RemoveAllBreakpointsAction.Exceptions_occurred_removing_breakpoints._5=Exceptions occurred removing breakpoints.
RemoveAllBreakpointsAction.Removing_all_breakpoints_4=Removing all breakpoints

RemoveBreakpointAction.Breakpoint(s)_removal_failed_3=Breakpoint(s) removal failed
RemoveBreakpointAction.Exceptions_occurred_attempting_to_remove_a_breakpoint._5=Exceptions occurred attempting to remove a breakpoint.
RemoveBreakpointAction.Removing_a_breakpoint_4=Removing a breakpoint

ResumeActionDelegate.Exceptions_occurred_attempting_to_resume._2=Exceptions occurred attempting to resume.
ResumeActionDelegate.Resume_3=Resume
ResumeActionDelegate.Resume_failed._1=Resume failed.

ShowDetailPaneAction.Show_detail_pane_2=Show Detail Pane
ShowDetailPaneAction.Show_Variable_Detail_Pane_1=Show &Detail Pane

ShowSupportedBreakpointsAction.Show_For_Selected=Show Supported &Breakpoints
ShowSupportedBreakpointsAction.tooltip=Show Breakpoints Supported by Selected Target

ShowTypesAction.Show_&Type_Names_1=Show &Type Names
ShowTypesAction.Show_Type_Names=Show Type Names

StepIntoActionDelegate.Exceptions_occurred_attempting_to_step_into_the_frame_2=Exceptions occurred attempting to step into the frame
StepIntoActionDelegate.Step_Into_3=Step Into
StepIntoActionDelegate.Step_into_failed_1=Step into failed

StepOverActionDelegate.Exceptions_occurred_attempting_to_step_over_the_frame_2=Exceptions occurred attempting to step over the frame
StepOverActionDelegate.Step_over_3=Step Over
StepOverActionDelegate.Step_over_failed_1=Step over failed

StepReturnActionDelegate.Exceptions_occurred_attempting_to_run_to_return_of_the_frame._2=Exceptions occurred attempting to run to return of the frame.
StepReturnActionDelegate.Run_to_Return_3=Step Return
StepReturnActionDelegate.Run_to_return_failed._1=Step return failed.

SuspendActionDelegate.Exceptions_occurred_attempting_to_suspend._2=Exceptions occurred attempting to suspend.
SuspendActionDelegate.Suspend_3=Suspend
SuspendActionDelegate.Suspend_failed_1=Suspend failed

TerminateActionDelegate.Exceptions_occurred_attempting_to_terminate._2=Exceptions occurred attempting to terminate.
TerminateActionDelegate.Terminate_3=Terminate

TerminateActionDelegate.Terminate_failed._1=Terminate failed.
TerminateAllAction.Exceptions_occurred_attempting_to_terminate_all._5=Exceptions occurred attempting to terminate all.
TerminateAllAction.Terminate_All_2=Terminate All
TerminateAllAction.Terminate_all_failed_3=Terminate all failed

TerminateAndRemoveActionDelegate.Exceptions_occurred_attempting_to_terminate_and_remove_2=Exceptions occurred attempting to terminate and remove
TerminateAndRemoveActionDelegate.Terminate_and_Remove;_3=Terminate and Remove;
TerminateAndRemoveActionDelegate.Terminate_and_remove_failed_1=Terminate and remove failed

TextViewerGotoLineAction.Enter_line_number__8=Enter line number (1...{0}):
TextViewerGotoLineAction.Exceptions_occurred_attempt_to_go_to_line_2=Exceptions occurred attempt to go to line
TextViewerGotoLineAction.Go_to_&Line...@Ctrl+L_4=Go to &Line...@Ctrl+L
TextViewerGotoLineAction.Go_To_Line_1=Go to Line
TextViewerGotoLineAction.Line_number_out_of_range_1=Line number out of range
TextViewerGotoLineAction.Not_a_number_2=Not a number
DebugDropDownAction.Debug_last_launched_1=Debug Last Launched: 
RunDropDownAction.Run_last_launched_1=Run Last Launched: 
DebugDropDownAction.Debug_1=Debug 
RunDropDownAction.Run_1=Run
DebugWithConfigurationAction.Debug_As_1=Debug &As
RunWithConfigurationAction.Run_As_1=Run &As
OpenDebugConfigurations.Debug..._1=&Debug...
OpenRunConfigurations.Run..._1=&Run...
RelaunchLastAction.Cannot_relaunch_1=Cannot relaunch
RelaunchLastAction.Cannot_relaunch_[{0}]_because_it_does_not_support_{2}_mode_2=Cannot relaunch [{0}] because it does not support {1} mode
RelaunchLastAction.Error_relaunching_3=Error relaunching
RelaunchLastAction.Error_encountered_attempting_to_relaunch_4=Error encountered attempting to relaunch
