###############################################################################
# Copyright (c) 2005, 2007 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
###############################################################################
# properties file for org.eclipse.jst.jee.ui
Bundle-Name.0 = Eclipse Java EE Developer Tools
Bundle-Vendor.0 = Eclipse Web Tools Platform
create_deploy_files=Generate Deployment Descriptor Stub
j2ee=Java EE
j2ee.actions.description_ui_=Actions for Java EE Development
ENTERPRISE_BEAN_DECORATOR=Java EE 5 Enterprise Beans and Interfaces Decorator
ENTERPRISE_BEAN_DECORATOR.DESCRIPTION=Java EE 5 Enterprise Beans are decorated according to their type Session/Message Driven/Entity. The same decorator is used to mark Business and 2.x interfaces
JAVA_EE_5_PROBLEM_MARKER_RESOURCE_DECORATOR=Java EE 5 Project Problem Marker Resource Decorator
JAVA_EE_5_PROBLEM_MARKER_RESOURCE_DECORATOR.DESCRIPTION=Resource Decorator enables error markers to be put on the project node.
jeeProjectDecorator=Java EE 5 Project Decorator
jeeProjectDecorator.description=Decorator is used to mark Java EE 5 projects 
ADD_REMOVE_MODULE_DEPENDENCIES_ACTION = Add/Remove
EJB_NAVIGATOR_CONTENT = JEE Navigator Content EJB
WEB_NAVIGATOR_CONTENT = JEE Navigator Content WEB
EAR_NAVIGATOR_CONTENT = JEE Navigator Content EAR
APP_CLIENT_NAVIGATOR_CONTENT = JEE Navigator Content Application Client