###############################################################################
# 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
###############################################################################
#
# $Source: /cvsroot/webtools/jeetools.move/webtools.javaee.git/plugins/org.eclipse.jem.ui/beaninfoui/org/eclipse/jem/internal/beaninfo/ui/Attic/messages.properties,v $
# $Revision: 1.3 $  $Date: 2005/02/15 23:02:54 $
#


SearchPathDialog.ChoosePackages                         = &Choose Packages
SearchPathDialog.Remove                                 = &Remove
SearchPathDialog.Desc.Label                             = &Modify search path of packages within this BeanInfo classes JAR/folder
SearchPathDialog.ModifySearchPaths                      = Modify Search Paths - {0}
SearchPathDialog.NotEditable_INFO_                      = IWAV0075I Plugin type BeanInfo classes locations are not editable
SearchPathDialog.PackagePresent_INFO_                   = IWAV0076I Package already in the search path
SearchPathDialog.InputDialog.Title                      = Package
SearchPathDialog.InputDialog.Message                    = &Enter a package:
BeanInfoPathsBlock.ExportAll                            = E&xport all
BeanInfoPathsBlock.UnexportAll                          = U&nexport all
BeanInfoPathsBlock.Page.Tab.Packages                    = &Packages
BeanInfoPathsBlock.Page.Tab.Classes                     = &BeanInfo classes
BeanInfosWorkbookPage.AddFolders                        = &Add Folders
BeanInfosWorkbookPage.AddJARs                           = Add &JARs
BeanInfosWorkbookPage.AddExternalJAR                    = Add E&xternal JARs
BeanInfosWorkbookPage.AddVariable                       = Add &Variable
BeanInfosWorkbookPage.AddProjects                       = Add Projec&ts
BeanInfosWorkbookPage.ModifyPaths                       = &Modify Paths
BeanInfosWorkbookPage.Remove                            = &Remove
BeanInfosWorkbookPage.List.Text                         = &Choose locations of BeanInfo classes (BeanInfo classes locations not in current project)
BeanInfosWorkbookPage.SelectionDialog.Classes.Title     = BeanInfo Class Folders Selection
BeanInfosWorkbookPage.SelectionDialog.JARs.Title        = JAR Selection
BeanInfosWorkbookPage.SelectionDialog.JARs.Message      = &Choose JARs to be added as BeanInfo classes JARs
BeanInfosWorkbookPage.SelectionDialog.ExtJARs.Text      = JAR Selection
BeanInfosWorkbookPage.SelectionDialog.Projects.Title    = BeanInfo Projects Selection
BeanInfosWorkbookPage.SelectionDialog.Classes.Prompt    = &Choose folders to be added as BeanInfo classes folders.
BeanInfosWorkbookPage.SelectionDialog.Projects.Prompt   = &Choose projects to be added as BeanInfo projects.
PackagesWorkbook.ChoosePackages                         = &Choose packages
PackagesWorkbook.ChooseDefinedPaths                     = Choose &defined paths
PackagesWorkbook.Remove                                 = &Remove
PackagesWorkbook.LabelText                              = Choose BeanInfo &packages from the class path
PackagesWorkbook.SelectionDialog.DefinedPaths.Title     = Choose Defined Paths
PackagesWorkbook.SelectionDialog.DefinedPaths.Message   = Choose the pre-defined paths to add to the search path
LabelProvider.Library.Folder                            = {0} (class folder)
LabelProvider.Library.(PathLastSegment,PathRelative)    = {0} - {1}
LabelProvider.Library.(PathLastSegment,PathExceptLast)  = {0} - {1}
LabelProvider.Variable.(name,PathOSString)              = {0} - {1}
LabelProvider.(packageName,Path)                        = {0}: {1}

VariableSelectionBlock.variable.label                   = &Variable Name:
VariableSelectionBlock.variable.button                  = &Browse...
VariableSelectionBlock.extension.label                  = Path E&xtension:
VariableSelectionBlock.extension.button                 = Bro&wse...
VariableSelectionBlock.fullpath.label                   = Resolved Path:

VariableSelectionBlock.error.entername_ERROR_           = IWAV0077E Variable name must be entered.
VariableSelectionBlock.error.namenotexists_ERROR_       = IWAV0078E Variable does not exist.
VariableSelectionBlock.error.pathexists_ERROR_          = IWAV0079E Class path entry already exists.
VariableSelectionBlock.error.invalidextension_ERROR_    = IWAV0080E Extension is not a valid path.

VariableSelectionBlock.warning.pathnotexists_WARN_      = IWAV0081W Resolved path is not an existing JAR file.

VariableSelectionBlock.ExtJarDialog.title               = JAR Selection




#
# Properties for the com.ibm.etools.beaninfo.ui plugin
#

# This shows up as the title of a message dialog
Beaninfo_UI_.errortitle                                 = Error

Beaninfo_UI_.error                                      = Error while setting BeanInfo configuration.

BeaninfoPropertiesPage_INFO_.nojavaproject              = IWAV0019I BeanInfo is only applicable to Java projects.
BeaninfoPropertiesPage_INFO_.closedproject              = IWAV0020I BeanInfo is not available for a closed project.

# This is a checkbox on a preference page. The label is to indicate whether introspection is enabled to run or not.
BeaninfoPathsBlock_UI_.enablebeaninfo                   = &Enable BeanInfo Introspection on this Project

# This is a header line for a page of preferences.
BeaninfoPathsBlock_UI_.searchpath.label                 = Build BeanInfo &search path order and exported entries:\n(Exported entries are contributed to dependent projects)
BeaninfoPathsBlock_UI_.searchpath.up.button             = &Up
BeaninfoPathsBlock_UI_.searchpath.down.button           = &Down
BeaninfoPathsBlock_UI_.searchpath.remove.button         = &Remove
BeaninfoPathsBlock_UI_.serachpath.tab.order             = &Order and Export

BeaninfoPathsBlock_UI_.warning.EntryMissing             = Project class path entries, or BeanInfo class files are missing.

# {0} will be the package name, e.g. java.lang
BeaninfoPathsBlock_WARN_.searchpath.missing.path.format = IWAV0021W {0} - Package path not found.

# This is a message on a progress dialog.
BeaninfoPathsBlock_UI_.searchpath.operationdescription  = Setting BeanInfo search paths...

BeaninfoPathsBlock_UI_.addsearchpath.title              = Select Packages
BeaninfoPathsBlock_UI_.addsearchpath.description        = &Select packages to add to search path:

BeaninfoPathsBlock_UI_.warning.EntryMissing             = Project class path entries, or BeanInfo class files are missing.
BeaninfoPathsBlock_UI_.searchpath.add.button            = Add Package...
