###############################################################################
# Copyright (c) 2005 Oracle Corporation.
# 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:
#    Gerry Kessler - initial API and implementation
#    Ian Trimble - change key names for use with org.eclipse.osgi.util.NLS
###############################################################################
JSFLibraryRegistry_ErrorCreatingURL=Error creating URL for JSF Library Registry
JSFLibraryRegistry_NoLoadCreatingNew=Could not load JSF Library Registry; creating new registry
JSFLibraryRegistry_ErrorSaving=Error saving JSF Library Registry
JSFLibraryRegistry_DEFAULT_IMPL_LABEL=<Default>
JSFLibraryConfigModel_Null_Data_Source=Data Source is not provided.
JSFLibraryRegistry_ErrorLoadingFromExtPt=Error while loading JSF Libraries from extension points
JSFLibraryClasspathContainer_IMPL_LIBRARY=[JSF Library - implementation]

JSFLibraryValidator_MISSING_JSF_IMPLEMENTATION_CLASSES=Selected libraries are missing key JSF implementation classes (javax.faces.*)

JSFFacetInstallDataModelProvider_ValidateServletName=Specify a servlet name to use
JSFLibraryConfigPersistData_SAVED_IMPLLIB_NOT_FOUND=Saved JSF implementation library in {0} is unavailable in JSF Library Registry
JSFLibraryConfigPersistData_SAVED_COMPLIB_NOT_FOUND=Saved JSF component library in {0} is unavailable in JSF Library Registry
JSFLibraryClasspathContainer_NON_IMPL_LIBRARY=[JSF Library]
JSFLibrariesContainerInitializer_missing_library=[missing JSF Library]
JSFFacetInstallDataModelProvider_DupeJarValidation=Duplicated jar on classpath: {0}
JSFFacetInstallDataModelProvider_ValidateConfigFilePath=The configuration file path is not valid
JSFFacetInstallDataModelProvider_ValidateConfigFileEmpty=Specify a valid name and location for JSF configuration file
JSFFacetInstallDataModelProvider_ValidateConfigFileRelative1=Configuration file must be specified relative to the project''s {0} folder
JSFFacetInstallDataModelProvider_ValidateConfigFileRelative2=Configuration file must be located in the project''s {0} folder
JSFFacetInstallDataModelProvider_INITIAL_VALIDATION_IMPL_TYPE=Select an implementation library.   If a server supplied library is chosen , the chosen server adapter must be capable of providing the JSF Implementation jars, or the application will not validate or compile.
JSFFacetInstallDataModelProvider_INVALID_JSF_CONFIG_FILE_NAME=Not a valid JSF configuration file name
JSFFacetInstallDataModelProvider_ValidateConfigFileXML=JSF configuration file must be an XML file
JSFFacetInstallDataModelProvider_ValidateConfigFileSlashes=Configuration file path must not contain "\\"s.   Use "/" instead.
JSFLibCfgDialogSettingData_Sticky_Component_Lib_Not_Exist=A sticky component library selection no longer exists.

JSFFacetInstallDelegate_AllowJavascriptDescription=\n\tThis parameter tells MyFaces if javascript code should be allowed in\n\tthe rendered HTML output.\n\tIf javascript is allowed, command_link anchors will have javascript code\n\tthat submits the corresponding form.\n\tIf javascript is not allowed, the state saving info and nested parameters\n\twill be added as url parameters.\n\tDefault is 'true'
JSFFacetInstallDelegate_AutoScrollDescription=\n\tIf true, a javascript function will be rendered that is able to restore the\n\tformer vertical scroll on every request. Convenient feature if you have pages\n\twith long lists and you do not want the browser page to always jump to the top\n\tif you trigger a link or button action that stays on the same page.\n\tDefault is 'false'\n
JSFFacetInstallDelegate_InternalErr=Internal Error creating JSF Facet.  Missing configuration.
JSFFacetInstallDelegate_ConfigErr=''{0}'' : unable to configure web module for JavaServer Faces
JSFFacetInstallDelegate_MaxFileSizeDescription=\n\tSet the size limit for uploaded files. Format: 10 - 10 bytes\n\t10k - 10 KB 10m - 10 MB 1g - 1 GB
JSFFacetInstallDelegate_NonUpdateableWebXML=JSF Facet was not installed on ''{0}''.  The web.xml file needs to be updateable.
JSFFacetInstallDelegate_PrettyHtmlDescription=\n\tIf true, rendered HTML code will be formatted, so that it is 'human-readable'\n\ti.e. additional line separators and whitespace will be written, that do not\n\tinfluence the HTML code.\n\tDefault is 'true'
JSFFacetInstallDelegate_StateSavingMethod=State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2
JSFFacetUninstallDelegate_ConfigErr=''{0}'' : unable to de-configure web module for JavaServer Faces
JSFFacetUninstallDelegate_NonUpdateableWebXML=JSF Facet was not un-installed from ''{0}''.  The web.xml file needs to be updateable.

ArchiveFileImpl_CannotCopyFile=Cannot copy file
ArchiveFileImpl_CannotCloseFile=Cannot close file
ArchiveFileImpl_CannotLocatePluginRelativeFile=Cannot locate plugin-relative file "{0}"

PluginProvidedJSFLibraryCreationHelper_ErrorCreating=Unable to create JSF Library: {0}
PluginProvidedJSFLibraryCreationHelper_ErrorMultipleDefinition={0} defined multiple times in {1}

JSFUtils_ErrorCreatingConfigFile=Error creating config file
JSFUtils_ErrorClosingConfigFile=Error closing config file

JSFAppConfigUtils_ErrorOpeningJarFile=Error opening JarFile "{0}"

JARFileJSFAppConfigProvider_ErrorLoadingModel=Error loading model for file "{0}"
JSFUtils_MissingJAR= Missing JSF Library Jar: {0} in {1}
Could_Not_GetJSFVersion=Could not get valid JSF version from facet {0}

J2EEModuleDependencyDelegate_UpdatingJ2EEModuleDependencies=Updating J2EE Module Dependencies
J2EEModuleDependencyDelegate_UpdatingJ2EEModuleDependenciesForProject=Updating J2EE Module Dependencies for project "{0}"

JSFRegistryMigration05_to_10_title=User Intervention Required
JSFRegistryMigration05_to_10_message=IMPORTANT! Please read below:
JSFRegistryMigration05_to_10_customMessage=You have loaded a workspace created with a previous \
version of JSF Tools.\nYour JSF Library Registry is out of date and needs to be migrated forward to continue.\n\
If you choose to proceed, be aware of the following consequences:\n\
\n\
1) Projects in this workspace will need to be manually migrated by you to work in this version of JSF Tools.\n\
2) Once migrated, this workspace will no longer work in older versions of JSF Tools.\n\
\n\
If this is not what you want, exit immediately and your workspace will still load in older versions.

JSFRegistryMigrationCannot05_to_10_title=Error During Registry Upgrade
JSFRegistryMigrationCannot05_to_10_message=IMPORTANT! Please read below:
JSFRegistryMigrationCannot05_to_10_customMessage=You a loaded a workspace created with a previous \
version of JSF Tools.\nYour JSF Library Registry is out of date and needs to be migrated forward to continue.\n\
However, the existing registry has a problem and cannot be upgraded. 
RegistryMigrationStartupHandler_Error_committing_migration=Error committing migration\!
RegistryMigrationStartupHandler_Error_Rolling_Back_Migration=Error rolling back migration\!
RegistryMigrationStartupHandler_Dialog_Confirm_Migration=Confirm
RegistryMigrationStartupHandler_Dialog_Abort_And_Exit_Migration=Abort and Exit
RegistryMigrationStartupHandler_Launch_Migration_Doc_On_Confirm=Launch Migration Doc on Confirm
RegistryUpgradeCommitHandler_Text=An unrecoverable error occurred while trying to migrate your JSF Library Registry to a newer version.  This may cause your library references to be broken in your JSF projects.
RegistryUpgradeCommitHandler_Title=Serious Error Encountered\!

JSFFacet11_presetLabel = JavaServer Faces v1.1 Project
JSFFacet11_presetDescription = Configures a Dynamic Web application to use JSF v1.1

