###############################################################################
# Copyright (c) 2000, 2004 IBM Corporation and others.
# All rights reserved. This program and the accompanying materials 
# are made available under the terms of the Common Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/cpl-v10.html
# 
# Contributors:
#     IBM Corporation - initial API and implementation
###############################################################################

AddToFavoritesAction.1=Add to {0} &Favorites
AddToFavoritesAction.2=Error
AddToFavoritesAction.3=Unable to add to favorites.

ChangeVariableValue.errorDialogMessage=Setting the value failed.
ChangeVariableValue.errorDialogTitle=Setting Value
ChangeVariableValue.title=&Change Value...
ChangeVariableValue.toolTipText=Change the Value of the Selected Variable or Register
ChangeVariableValue.1=Set Value
ChangeVariableValue.2=Enter a new value for {0}:
ChangeVariableValue.3=An exception occurred
ChangeVariableValue.4=Invalid value


CollapseAllAction.0=Collapse All

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.

EditLaunchConfigurationAction.1=Edit {0}...

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.0=Remove All Breakpoints
RemoveAllBreakpointsAction.1=Are you sure you want to remove all breakpoints?
RemoveAllBreakpointsAction.2=Remove Breakpoints

RemoveBreakpointAction.0=Delete Breakpoints
RemoveBreakpointAction.1=Delete all breakpoints in the selected group(s)?
RemoveBreakpointAction.2=Remove Breakpoints
RemoveBreakpointAction.Exceptions_occurred_attempting_to_remove_a_breakpoint._5=An exception occurred attempting to remove breakpoint(s).
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.

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.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

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

AbstractLaunchHistoryAction.0={0} {1}
AbstractLaunchHistoryAction.1=Run
AbstractLaunchHistoryAction.2=Debug
AbstractLaunchHistoryAction.3=Profile
AbstractLaunchHistoryAction.4=Launch

ToggleDetailPaneAction.1=Vertical View Orientation
ToggleDetailPaneAction.2=Place the Detail Pane Underneath the Main Tree View
ToggleDetailPaneAction.3=Place the Detail Pane Underneath the Main Tree View
ToggleDetailPaneAction.4=Horizontal View Orientation
ToggleDetailPaneAction.5=Place the Detail Pane on the Right of the Main Tree View
ToggleDetailPaneAction.6=Place the Detail Pane on the Right of the Main Tree View
ToggleDetailPaneAction.8=Hide the Detail Pane so that only the Main Tree View is Visible
ToggleDetailPaneAction.9=Hide the Detail Pane so that only the Main Tree View is Visible

WatchExpressionDialog.0=Edit Watch Expression
WatchExpressionDialog.1=Add Watch Expression
WatchExpressionDialog.2=E&xpression:
WatchExpressionDialog.3=&Enable
WatchExpressionDialog.4=Expression must not be empty
WatchAction.0=Error creating watch
WatchAction.1=An exception occurred while attempting to create watch item.
SkipAllBreakpointsAction.0=Skip All Breakpoints
SkipAllBreakpointsAction.2=Skip all breakpoints, whether they are enabled or not
AssignValueAction.1=Assign Value
AssignValueAction.2=Invalid Value
AssignValueAction.3=The value {0} cannot be assigned to {1}
AssignValueAction.4=Invalid Value

RunToLineAction.0=Error
RunToLineAction.1=Run to line failed
RunToLineHandler.0=Run To Line
RunToLineActionDelegate.4=Run to &Line

RetargetAction.2=Error
RetargetAction.3=Operation failed
LaunchAsAction.0={0} As
ModifyWatchpointAction.0=Error
ModifyWatchpointAction.1=Failed to modify watchpoint
LaunchShortcutsAction.0={0} As
LaunchShortcutsAction.1=(none applicable)
FindVariableDialog.0=An exception occurred computing variable name. See log for details.
FindVariableDialog.1=&Select a variable to display (? = any character, * = any String):
FindVariableDialog.2=&Matching variables:
FindVariableDialog.3=Find Variable
FindVariableAction.0=Find Variable...
