###############################################################################
# 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.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.print_information_that_might_be_helpful_to_12=print information that might be helpful to
InternalAntRunner._t_t_t_t_t_t_t_t_t_t_tdiagnose_or_report_problems._13=\t\t\t\t\t\t\t\t\t\t\tdiagnose or report problems.
InternalAntRunner._t_t_t_t_t_t_t_t_____15=\t\t\t\t\t\t\t\t\'\'
InternalAntRunner.load_all_properties_from_file_with_-D_19=load all properties from file with -D
InternalAntRunner._t_t_t_t_t_t_t_t_t_t_tproperties_taking_precedence_20=\t\t\t\t\t\t\t\t\t\t\tproperties taking precedence
InternalAntRunner.the_class_which_will_handle_input_requests_22=the class which will handle input requests
InternalAntRunner._t_t_t_t_t_t_t_____1=\t\t\t\t\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

ProgressBuildListener.Build_cancelled._5=Build cancelled.
