/**********************************************************************
 * 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 - Initial API and implementation
 **********************************************************************/
package org.eclipse.ant.internal.ui.launchConfigurations;

import org.eclipse.osgi.util.NLS;

public class AntLaunchConfigurationMessages extends NLS {
	private static final String BUNDLE_NAME = "org.eclipse.ant.internal.ui.launchConfigurations.AntLaunchConfigurationMessages";//$NON-NLS-1$

    public static String AddVariableStringAction_1;
	public static String AddVariableStringAction_2;
	public static String AddVariableStringAction_3;
	public static String AddVariableStringAction_4;

	public static String AntBuildTab_1;
	public static String AntBuildTab_2;
	public static String AntBuildTab_3;
	public static String AntBuildTab_4;
	public static String AntBuildTab_5;
	public static String AntBuildTab_6;
	public static String AntBuildTab_7;
	public static String AntBuildTab_8;
	public static String AntBuildTab_9;

	public static String AntLaunchDelegate_Launching__0__1;
	public static String AntLaunchDelegate_Running__0__2;
	public static String AntLaunchDelegate_Build_In_Progress;
	public static String AntLaunchDelegate_Failure;
	public static String AntLaunchDelegate_22;
	public static String AntLaunchDelegate_23;
	public static String AntLaunchDelegate_28;
	public static String AntLaunchShortcut_0;

	public static String AntLaunchShortcut_Unable;
	public static String AntLaunchShortcut_2;
	public static String AntLaunchShortcut_3;
	public static String AntLaunchShortcut_4;
	public static String AntLaunchShortcut_5;
	public static String AntLaunchShortcut_Error_7;
	public static String AntLaunchShortcut_Build_Failed_2;
	public static String AntLaunchShortcut_Exception_launching;

	public static String AntPropertiesTab__Properties__6;
	public static String AntPropertiesTab_Property_f_iles__7;
	public static String AntPropertiesTab_P_roperties_8;
	public static String AntPropertiesTab_Error_reading_configuration_9;
	public static String AntPropertiesTab_6;

	public static String AntJRETab_2;
	public static String AntJRETab_3;

	public static String AntHomeClasspathEntry_8;
	public static String AntHomeClasspathEntry_9;
	public static String AntBuilderTargetsTab_0;
	public static String AntBuilderTargetsTab_1;
	public static String AntBuilderTargetsTab_2;
	public static String AntBuilderTargetsTab_3;
	public static String AntBuilderTargetsTab_4;
	public static String AntBuilderTargetsTab_5;
	public static String AntBuilderTargetsTab_6;
	public static String AntBuilderTargetsTab_7;
	public static String AntBuilderTargetsTab_8;
	public static String AntBuilderTargetsTab_10;
	public static String AntHomeClasspathEntry_10;
	public static String AntHomeClasspathEntry_11;

	public static String AntMainTab__Select_a_build_file__1;
	public static String AntMainTab_3;
	public static String AntMainTab_6;
	public static String AntMainTab_0;
	public static String AntMainTab_1;

	public static String AntTargetsTab_Check_targets_to_e_xecute__1;
	public static String AntTargetsTab_0_out_of_0_selected_2;
	public static String AntTargetsTab_Target_execution_order__3;
	public static String AntTargetsTab__Order____4;
	public static String AntTargetsTab_Name_5;
	public static String AntTargetsTab_Description_6;
	public static String AntTargetsTab__0__out_of__1__selected_7;
	public static String AntTargetsTab_Tar_gets_14;
	public static String AntTargetsTab_Error_reading_configuration_12;
	public static String AntTargetsTab_12;
	public static String AntTargetsTab_13;
	public static String AntTargetsTab_14;
	public static String AntTargetsTab_15;
	public static String AntTargetsTab_16;
	public static String AntTargetsTab_17;
	public static String AntTargetsTab_0;
	public static String AntTargetsTab_1;
	public static String AntClasspathTab_0;

	public static String ContributedClasspathEntriesEntry_1;

	public static String EditAntHomeEntryAction_1;

	public static String TargetOrderDialog_Order_Targets_1;
	public static String TargetOrderDialog__Specify_target_execution_order__2;
	public static String TargetOrderDialog__Up_3;
	public static String TargetOrderDialog__Down_4;

	public static String AntEnvironmentTab_0;
	public static String SetTargetsDialog_0;
    
    public static String AntWorkingDirectoryBlock_0;

	static {
		// load message values from bundle file
		NLS.initializeMessages(BUNDLE_NAME, AntLaunchConfigurationMessages.class);
	}
}