###############################################################################
# Copyright (c) 2000, 2005 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_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_4=Could not load property file: {0}
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.

InternalProject_0=Could not create type {0} due to {1}
