###############################################################################
# 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
###############################################################################
_0=Failed to find the image "{0}".
_1=New Dynamic Web Project
_2=Servlet version:
_3=Dynamic Web Project
_4=Create a standalone Dynamic Web project or add it to a new or existing Enterprise Application.
_5=Web &project:
_6=WAR file:
_7=Import a WAR file from the file system
_8=WAR Import
_9=WAR Export
_10=Export Web project to the local file system.
_11=Context root:
_12=Convert Simple Web to Web Module
_13=Convert Simple Web to Web Module.
_14=WAR Import: Web libraries
_15=Select the web library jars from the list below to be imported as web library projects.  Unselected web libraries will be imported as jars in the WEB-INF/lib directory.
_16=Select All
_17=Deselect All
_18=New Dynamic Web Project
ADD_SERVLET_WIZARD_WINDOW_TITLE=Create Servlet
ADD_SERVLET_WIZARD_PAGE_TITLE=Create Servlet
ADD_SERVLET_WIZARD_PAGE_DESC=Enter servlet deployment descriptor specific information.

ADD_FILTER_WIZARD_WINDOW_TITLE=Create Filter
ADD_FILTER_WIZARD_PAGE_TITLE=Create Filter
ADD_FILTER_WIZARD_PAGE_DESC=Enter servlet filter deployment descriptor specific information.

ADD_LISTENER_WIZARD_WINDOW_TITLE=Create Listener
ADD_LISTENER_WIZARD_PAGE_TITLE=Create Listener
ADD_LISTENER_WIZARD_PAGE_DESC=Select the application lifecycle events to listen to. 

DISPATCHER_REQUEST=&REQUEST
DISPATCHER_FORWARD=&FORWARD
DISPATCHER_INCLUDE=&INCLUDE
DISPATCHER_ERROR=&ERROR

DEFAULT_PACKAGE=(default package)
SELECT_CLASS_TITLE=Select Class
MAP_CLASS_NAME_TO_CLASS_ERROR_MSG=IWAE0060E Could not uniquely map the class name to a class.
EMPTY_LIST_MSG=Empty List
ADD_LABEL=Add
USE_EXISTING_SERVLET_CLASS=&Use an existing Servlet class or JSP
USE_EXISTING_FILTER_CLASS=&Use existing Filter class
USE_EXISTING_LISTENER_CLASS=&Use existing Listener class
INIT_PARAM_TITLE=Initialization Parameters
INIT_PARAM_LABEL=Initialization &parameters:
URL_MAPPINGS_TITLE=URL Mappings
URL_MAPPINGS_LABEL=&URL mappings:
CHOOSE_SERVLET_CLASS=&Choose a JSP file:

NEW_SERVLET_WIZARD_WINDOW_TITLE=New Servlet
NEW_SERVLET_WIZARD_PAGE_TITLE=Servlet
NEW_SERVLET_WIZARD_PAGE_DESC=Create a new servlet.
SERVLET_PACKAGE_LABEL=Java package:
SERVLET_NAME_LABEL=Servlet name:

NEW_FILTER_WIZARD_WINDOW_TITLE=New Filter
CHOOSE_FILTER_CLASS=Choose a filter class
SERVLET_MAPPINGS_LABEL=Servlet mappings:
FILTER_MAPPINGS_LABEL=Fi&lter mappings:

ADD_LISTENER_WIZARD_SERVLET_CONTEXT_EVENTS=Servlet context events
ADD_LISTENER_WIZARD_HTTP_SESSION_EVENTS=HTTP session events
ADD_LISTENER_WIZARD_SERVLET_REQUEST_EVENTS=Servlet request events
ADD_LISTENER_WIZARD_LIFECYCLE=Lifecycle
ADD_LISTENER_WIZARD_LIFECYCLE_L=&Lifecycle
ADD_LISTENER_WIZARD_LIFECYCLE_I=L&ifecycle
ADD_LISTENER_WIZARD_LIFECYCLE_Y=Lifec&ycle
ADD_LISTENER_WIZARD_CHANGES_TO_ATTRIBUTES=Changes to attributes
ADD_LISTENER_WIZARD_CHANGES_TO_ATTRIBUTES_C=&Changes to attributes
ADD_LISTENER_WIZARD_CHANGES_TO_ATTRIBUTES_H=C&hanges to attributes
ADD_LISTENER_WIZARD_CHANGES_TO_ATTRIBUTES_G=Chan&ges to attributes
ADD_LISTENER_WIZARD_SESSION_MIGRATION=Session &migration
ADD_LISTENER_WIZARD_OBJECT_BINDING=&Object binding

ADD_BUTTON_LABEL=Add...
ADD_BUTTON_LABEL_A=&Add...
ADD_BUTTON_LABEL_D=A&dd...
EDIT_BUTTON_LABEL=Edit...
EDIT_BUTTON_LABEL_E=&Edit...
EDIT_BUTTON_LABEL_T=Edi&t...
REMOVE_BUTTON_LABEL=Remove
REMOVE_BUTTON_LABEL_R=&Remove
REMOVE_BUTTON_LABEL_V=Remo&ve
URL_PATTERN_TITLE=URL Patterns
URL_PATTERN_LABEL=&Pattern:
FOLDER_LABEL=Folder:
JAVA_PACKAGE_LABEL=Java package:
CLASS_NAME_LABEL=Class na&me:
SUPERCLASS_LABEL=&Superclass:
CONTAINER_SELECTION_DIALOG_TITLE=Container Selection
CONTAINER_SELECTION_DIALOG_DESC=Choose a Container:
CONTAINER_SELECTION_DIALOG_VALIDATOR_MESG=Choose the Web Content Folder or its subfolder
PACKAGE_SELECTION_DIALOG_TITLE=Package Selection
PACKAGE_SELECTION_DIALOG_DESC=Choose a package:
PACKAGE_SELECTION_DIALOG_MSG_NONE=No packages to choose from
SUPERCLASS_SELECTION_DIALOG_TITLE=Superclass Selection
SUPERCLASS_SELECTION_DIALOG_DESC=Choose a superclass:
INTERFACE_SELECTION_DIALOG_TITLE=Interface Selection
INTERFACE_SELECTION_DIALOG_DESC=Choose interfaces:
INTERFACE_SELECTION_DIALOG_MSG_NONE=''{0}'' added.
JAVA_CLASS_MODIFIERS_LABEL=Modifiers:
JAVA_CLASS_PUBLIC_CHECKBOX_LABEL=&Public
JAVA_CLASS_ABSTRACT_CHECKBOX_LABEL=Abs&tract
JAVA_CLASS_FINAL_CHECKBOX_LABEL=fina&l
JAVA_CLASS_INTERFACES_LABEL=&Interfaces:
JAVA_CLASS_METHOD_STUBS_LABEL=Which method stubs would you like to create?
JAVA_CLASS_MAIN_CHECKBOX_LABEL=public static void main(String[] args)
JAVA_CLASS_CONSTRUCTOR_CHECKBOX_LABEL=&Constructors from superclass
JAVA_CLASS_INHERIT_CHECKBOX_LABEL=In&herited abstract methods
JAVA_CLASS_BROWER_DIALOG_TITLE=Java Class Browser
JAVA_CLASS_BROWER_DIALOG_MESSAGE=Browse for a Java class

NAME_TITLE=Name
NAME_LABEL=Na&me:
DESCRIPTION_TITLE=Description
DESCRIPTION_LABEL=De&scription:
VALUE_TITLE=Value
VALUE_LABEL=&Value:
URL_SERVLET_LABEL=URL Pattern / Servlet Name
DISPATCHERS_LABEL=Dispatchers

BROWSE_BUTTON_LABEL=Bro&wse...
REMOVE_BUTTON=Remove
SELECT_ALL_BUTTON=&Select All
CLEAR_BUTTON=&Deselect All

NEW_JAVA_CLASS_DESTINATION_WIZARD_PAGE_DESC=Specify class file destination.
NEW_JAVA_CLASS_OPTIONS_WIZARD_PAGE_DESC=Specify modifiers, interfaces to implement, and method stubs to generate.

ImportWARAction_UI_=Import Web Module...
ExportWARAction_UI_=Export WAR file...

NO_WEB_PROJECTS=No Web Projects

SERVLETS =Servlets

WEB_CONT_NAME = WebAppContainerPage
WEB_CONT_PAGE_TITLE = Web App Libraries Container
WEB_CONT_PAGE_DESCRIPTION = This container dynamically populates classpath entries from the WEB-INF/lib and WEB-INF/classes directories of a web app.
WEB_CONT_PAGE_COMP_LABEL = Component:
WEBCONTENT=Web Content folder:


Compressed_Libraries= Libraries
Compressed_JavaResources= Java Resources{0}

ConvertToWebTitle=Convert to Dynamic Web Project
SelectWebVersion=Select a Dynamic Web module version:
