###############################################################################
# Copyright (c) 2000, 2003 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
###############################################################################

InternalAntRunner.Build_file__{0}_1=Buildfile: {0}
InternalAntRunner.Arguments__{0}_2=Arguments: {0}
InternalAntRunner.Default_target__3=Default target:
InternalAntRunner.Main_targets__4=Main targets:
InternalAntRunner.Subtargets__5=Subtargets:
InternalAntRunner.Unable_to_instantiate_logger__{0}_6=Unable to instantiate logger: {0}
InternalAntRunner.Could_not_load_the_version_information._{0}_9=Could not load the version information. {0}
InternalAntRunner.Could_not_load_the_version_information._10=Could not load the version information.
InternalAntRunner.options_13=options
InternalAntRunner.target_15=target
InternalAntRunner.Options___21=Options: 
InternalAntRunner.print_this_message_23=print this message
InternalAntRunner.print_project_help_information_25=print project help information
InternalAntRunner.print_the_version_information_and_exit_27=print the version information and exit
InternalAntRunner.be_extra_quiet_29=be extra quiet
InternalAntRunner.be_extra_verbose_31=be extra verbose
InternalAntRunner.print_debugging_information_33=print debugging information
InternalAntRunner.produce_logging_information_without_adornments_35=produce logging information without adornments
InternalAntRunner.use_given_file_for_log_37=use given file for log
InternalAntRunner.the_class_which_is_to_perform_logging_39=the class which is to perform logging
InternalAntRunner.add_an_instance_of_class_as_a_project_listener_41=add an instance of class as a project listener
InternalAntRunner.use_given_buildfile_43=use given buildfile
InternalAntRunner.use_value_for_given_property_45=use value for given property
InternalAntRunner.Using_{0}_file_as_build_log._1=Using {0} file as build log.
InternalAntRunner.Could_not_write_to_the_specified_log_file__{0}._Make_sure_the_path_exists_and_you_have_write_permissions._2=Cannot write on the specified log file: {0}. Make sure the path exists and you have write permissions.
InternalAntRunner.BUILD_SUCCESSFUL_1=BUILD SUCCESSFUL
InternalAntRunner.Unknown_argument__{0}_2=Unknown argument: {0}
InternalAntRunner.Buildfile__{0}_does_not_exist_!_1=Buildfile: {0} does not exist
InternalAntRunner.{0}_which_was_specified_to_be_a_build_listener_is_not_an_instance_of_org.apache.tools.ant.BuildListener._1={0} which was specified to be a build listener is not an instance of org.apache.tools.ant.BuildListener.
InternalAntRunner.{0}_which_was_specified_to_perform_logging_is_not_an_instance_of_org.apache.tools.ant.BuildLogger._2={0} which was specified to perform logging is not an instance of org.apache.tools.ant.BuildLogger.
InternalAntRunner.You_must_specify_a_classname_when_using_the_-listener_argument_1=You must specify a classname when using the -listener argument
InternalAntRunner.You_must_specify_a_classname_when_using_the_-logger_argument_2=You must specify a classname when using the -logger argument
InternalAntRunner.You_must_specify_a_log_file_when_using_the_-log_argument_3=You must specify a log file when using the -log argument
InternalAntRunner.You_must_specify_a_buildfile_when_using_the_-buildfile_argument_4=You must specify a buildfile when using the -buildfile argument
InternalAntRunner.12=print information that might be helpful to
InternalAntRunner.13=\t\t\t\t\t\tdiagnose or report problems.
InternalAntRunner.19=load all properties from file with -D
InternalAntRunner.20=\t\t\t\t\t\tproperties taking precedence
InternalAntRunner.22=the class which will handle input requests
InternalAntRunner.1=\t\t\t\"
InternalAntRunner.Class_{0}_not_found_for_task_{1}_1=Class {0} not found for task {1}
InternalAntRunner.Class_{0}_not_found_for_type_{1}_2=Class {0} not found for type {1}
InternalAntRunner.Only_one_logger_class_may_be_specified_1=Only one logger class may be specified
InternalAntRunner.You_must_specify_a_classname_when_using_the_-inputhandler_argument_1=You must specify a classname when using the -inputhandler argument
InternalAntRunner.Only_one_input_handler_class_may_be_specified._2=Only one input handler class may be specified.
InternalAntRunner.You_must_specify_a_property_filename_when_using_the_-propertyfile_argument_3=You must specify a property filename when using the -propertyfile argument
InternalAntRunner.Could_not_load_property_file_{0}__{1}_4=Could not load property file {0}: {1}
InternalAntRunner.The_specified_input_handler_class_{0}_does_not_implement_the_org.apache.tools.ant.input.InputHandler_interface_5=The specified input handler class {0} does not implement the org.apache.tools.ant.input.InputHandler interface
InternalAntRunner.Unable_to_instantiate_specified_input_handler_class_{0}___{1}_6=Unable to instantiate specified input handler class {0} : {1}
InternalAntRunner.Specifying_an_InputHandler_is_an_Ant_1.5.*_feature._Please_update_your_Ant_classpath_to_include_an_Ant_version_greater_than_this._2=Specifying an InputHandler is an Ant 1.5.* feature. Please update your Ant classpath to include an Ant version greater than this.
InternalAntRunner.The_diagnositics_options_is_an_Ant_1.5.*_feature._Please_update_your_Ant_classpath_to_include_an_Ant_version_greater_than_this._4=The diagnositics options is an Ant 1.5.* feature. Please update your Ant classpath to include an Ant version greater than this.
InternalAntRunner.Specifying_property_files_is_a_Ant_1.5.*_feature._Please_update_your_Ant_classpath._6=Specifying property files is a Ant 1.5.* feature. Please update your Ant classpath to include an Ant version greater than this.
InternalAntRunner.Default_target_{0}{1}{2}_does_not_exist_in_this_project_1=Default target {0}{1}{2} does not exist in this project
InternalAntRunner.ANT_HOME_must_be_set_to_use_Ant_diagnostics_2=ANT_HOME must be set to use Ant diagnostics
InternalAntRunner.Buildfile__{0}_is_not_a_file_1=Buildfile: {0} is not a file
InternalAntRunner.-find_not_supported=-find not supported.\nCan be emulated using Run As > Ant Build located\nin the Run > External Tools menu
InternalAntRunner.Error_setting_Ant_task=Error setting Ant task {0}
InternalAntRunner.Missing_Class=Could not load a class required for parsing targets
InternalAntRunner.157=-lib not supported\nConfigure the Ant runtime classpath using either the\nglobal Ant runtime classpath or the Ant runtime classpath\n for this particular build
InternalAntRunner.158=\t\t\tdo not allow interactive input
InternalAntRunner.159=\t\texecute all targets that do not depend
InternalAntRunner.160=\t\t\t\t\t\ton failed target(s)

ProgressBuildListener.Build_cancelled._5=Build cancelled.
