###############################################################################
# Copyright (c) 2003, 2006 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
###############################################################################
Creating_Web_Project____UI_=Creating Web Project...
The_path_for_the_links_sta_EXC_=IWAE0001E The path for the links state file is incorrect
Syntax_Error_in_the_links_UI_=Syntax Error in the links state file
Error_while_saving_links_s_EXC_=IWAE0002E Error while saving links state file
Operation_failed_due_to_SA_ERROR_=IWAE0003E Operation failed due to SAX error:
Operation_failed_due_to_IO_ERROR_=IWAE0004E Operation failed due to IO error:
Operation_failed_due_to_Co_ERROR_=IWAE0005E Operation failed due to Core error:
Operation_failed_due_to_Ja_ERROR_=IWAE0006E Operation failed due to Java Model error:
_1concat_EXC_=IWAE0007E Error occured getting web.xml: {0}
Error_importing_Module_Fil_EXC_=IWAE0008E Error importing Module File
Cannot_clone_TaglibInfo_1_EXC_=IWAE0009E Cannot clone TaglibInfo
Could_not_read_TLD_15=Could not read TLD
File_Serving_Enabler_7=File Serving Enabler
Auto_Generated___File_Enabler_9=Auto Generated - File Enabler
Generated_by_Web_Tooling_23=Generated by Web Tooling
Not_a_web_project_29=Not a web project
A_web_project_must_be_open_and_must_exist_for_properties_to_be_edited_30=A web project must be open and must exist for properties to be edited
Invalid_Servlet_Level_set_on_WebNature_3_EXC_=IWAE0010E Invalid Servlet Level set on WebNature
Context_Root_cannot_be_empty_2=Context root cannot be empty
Names_cannot_begin_or_end_with_whitespace_5=Names cannot begin or end with whitespace
Names_cannot_contain_whitespace_=Context root cannot contain whitespace 
The_character_is_invalid_in_a_context_root=The character ''{0}'' is invalid in a context root.
Folder_name_cannot_be_empty_2=Folder name cannot be empty
Folder_names_cannot_be_equal_4=Folder names cannot be equal
Folder_name_cannot_be_the_same_as_Java_source_folder_5=Folder name cannot be the same as Java source folder
Folder_name_cannot_be_the_same_as_Java_class_folder_6=Folder name cannot be the same as Java class folder
Folder_name_is_not_valid=Folder name {0} is not valid
Could_not_rename_____2=Could not rename: ''{0}'' already exists.
Sync_WLP_Op=Synchronizing Web Library Projects\n\t
Target_Update_Op=Updating target server for {0}\n\t
Set_ClassPath__UI_=Set ClassPath:
Update_ClassPath__UI_=Update ClassPath:
Catalog_Lib_Directory__UI_=Catalog Lib Directory:
Sychronize_Class_Path_UI_=Sychronize Class Path
UNABLE_TO_LOAD_MODULE_ERROR_=UNABLE_TO_LOAD_MODULE_ERROR_
Importing_archive=Importing archive ''{0}''.
Exporting_archive=Exporting archive ''{0}''.
EarFacetInstallDataModelProvider_The_Module_specification_level_of_=The Module specification level of {0}, is incompatible with the containing EAR version
DYNAMIC_WEB_DISTINCT_SRC_WEBCONTENT_ERROR=Dynamic Web Project Content and Source folder should be distinct
DYNAMIC_WEB_PERFORMANCE_VALIDATION=Dynamic Web default output folder should be set to {0} to improve performance
SOURCE_OUPUT_FOLDER_DIFF_BYCASE_ONLY=Source and output folder differ by case only 