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

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_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\t\tdiagnose or report problems.
InternalAntRunner.19=load all properties from file with -D
InternalAntRunner.20=\t\t\t\t\t\t\tproperties taking precedence
InternalAntRunner.22=the class which will handle input requests
InternalAntRunner.1=\t\t\t\t\'
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.The_diagnositics_options_is_an_Ant_1.5.*_feature._Please_update_your_Ant_classpath_to_include_an_Ant_version_greater_than_this._4=The diagnostics 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.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.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)
InternalAntRunner.161=Class {0} not found for task {1}
InternalAntRunner.162=Class {0} not found for type {1}

RemoteAntBuildLogger.1=BUILD FAILED
RemoteAntBuildLogger.Total_time=Total time: 
RemoteAntBuildLogger._minutes_2=\ minutes
RemoteAntBuildLogger._minute_3=\ minute
RemoteAntBuildLogger._seconds_4=\ seconds
RemoteAntBuildLogger._second_5=\ second
RemoteAntBuildLogger._milliseconds_6=\ milliseconds
