###############################################################################
# Copyright (c) 2000, 2013 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
# Johann Draschwandtner (Wind River) - [300988] Support filtering variables
###############################################################################

PromptExpanderBase_0=Please input a value for {0}
PromptExpanderBase_1=Please input a value
PromptingResolver_0=Failed to expand {0}. Input was cancelled.

RefreshTab_0=Recursively &include sub-folders
RefreshTab_1=Working set
RefreshTab_6=Refresh
RefreshTab_31=Refresh resources &upon completion.
RefreshTab_32=The &entire workspace
RefreshTab_33=The se&lected resource
RefreshTab_34=The &project containing the selected resource
RefreshTab_35=The f&older containing the selected resource
RefreshTab_36=&Specific resources
RefreshTab_37=Specify &Resources...
RefreshTab_40=working set
RefreshTab_42=Must select resources to refresh.

ResourceSelector_0=Select Resource

SelectedResourceResolver_0=Unable to resource a selected resource: {0}
StringPromptExpander_0=Variable input

StringVariableSelectionDialog_1=String Substitution
StringVariableSelectionDialog_2=Select Variable
StringVariableSelectionDialog_3=&Choose a variable (? = any character, * = any string):
StringVariableSelectionDialog_6=&Argument:
StringVariableSelectionDialog_7=C&onfigure...
StringVariableSelectionDialog_8=&Variable Description:
StringVariableSelectionDialog_0=&Edit Variables...
StringVariableSelectionDialog_9=&Show All
StringVariableSelectionDialog_10=Only the most common variables are shown.
StringVariableSelectionDialog_11=Some variables may not work in this context.

SystemPropertyArgumentSelector_0=Select System Property
SystemPropertyArgumentSelector_1=Select a system property (? = any character, * = any String):
