###############################################################################
# Copyright (c) 2003, 2004 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
###############################################################################
Could_not_find_root_object_ERROR_=IWAE0001E Could not find root object in resource: {0}
An_error_occurred_while_sa_ERROR_=IWAE0002E An error occurred while saving.
Cannot_run_J2EEUIWorkingCo_ERROR_=IWAE0003E Cannot run J2EEUIWorkingCopyManager operation because the Workspace tree is locked.
Unable_to_save_read-only_f_ERROR_=IWAE0004E Unable to save read-only file: {0}
The_following_resources_ne_UI_=The following resources need to be saved but are currently shared, do you want to save now?
Cannot_load_EJBFile_because_EJBEditModel_is_null_UI_=Cannot load EJBFile because EJBEditModel is null
WARNING_METAFOLDER_MISSING_UI_=WARNING_METAFOLDER_MISSING
Cannot_load_EJBFile_because_ejbNature.asEJBJarFile()_returns_null_UI_=Cannot load EJBFile because ejbNature.asEJBJarFile() returns null
EJBProjectResources.getEJBJar(EJBEditModel)_UI_=EJBProjectResources.getEJBJar(EJBEditModel)
Cannot_load_EJBJar_because_model_is_null_UI_=Cannot load EJBJar because model is null
Cannot_load_EJBFile_because_EJBNatureRuntime_is_null_UI_=Cannot load EJBFile because EJBNatureRuntime is null
WARNING_FILE_MISSING_UI_=WARNING_FILE_MISSING
CoreException_could_not_initialize_Web_Service_class_path_variables_ERROR_=IWAE0005E CoreException could not initialize Web Service class path variables
__Start_build_project_INFO_=IWAE0006I : Start build project
__Bad_builder_order_for_project_INFO_=IWAE0007I : Bad builder order for project
__No_imported_classes_folder,_quitting_INFO_=IWAE0008I : No imported classes folder, quitting
__Full/first_build_INFO_=IWAE0009I : Full/first build
__Considering_delta_INFO_=IWAE0010I : Considering delta
__Delta_build_INFO_=IWAE0011I : Delta build
Minimizing_project_UI_=Minimizing project
No_library_folder_UI_=No library folder
Not_a_J2EE_project_UI_=Not a J2EE project
No_source_types_UI_=No source types
Some_source_types_have___$___in_their_name_ERROR_=IWAE0012E Some source types have \'$\' in their name
RAR_File=RAR File
Error_opening_archive_for_export_2=Error opening archive for export
Error_getting_project_nature_runtime_3=Error getting project nature runtime
Error_occurred_loading_ra.xml__4=Error occurred loading ra.xml:
Creating_Connector_Project_5=Creating Connector Project
Error_getting_project_nature_runtime_6=Error getting project nature runtime
Error_occurred_saving_the_manifest_7=Error occurred saving the manifest
_UI_ParamValue_type=Param:
J2EEModulePostImportHelper.0=WEB
J2EEModulePostImportHelper.1=EJB
J2EEModulePostImportHelper.2=ApplicationClient
J2EEModulePostImportHelper.3=Connector
J2EEDeployOperation_UI_0=Deploying selected modules
J2EEDeployOperation_UI_1=Fatal Exception occured
J2EEDeployOperation_UI_Null_Status=Deployed successfully.
J2EEDeployOperation_1_UI_=Deploying {0} Using {1}
J2EEDeployOperation_2_UI_=Deployment from {0} completed successfully
J2EEDeployOperation_3_UI_=Deployment from {0} had errors: {1} \r\n
J2EEDeployOperation_4_UI_=Deploying {0}
NESTED_JAVA_OUTPUT_ERROR=Nested Java output paths defined in .wtpmodules file are not allowed.

