###############################################################################
# Copyright (c) 2001, 2007 Oracle 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:
#     Oracle Corporation - initial API and implementation
###############################################################################
EL_EXPR_MUST_BE_IN_HASH_BRACES_ID=EL expression must be of the form #{expression}
SYNTAX_ERROR_IN_EL_ID=Syntax error in EL
CANNOT_FIND_CLASS_NAME_ID=Cannot find fully qualified class: {0}
FULLY_QUALIFIED_NAME_MUST_BE_A_CLASS_ID=Fully qualified name must be a class: {0}
CLASS_MUST_BE_INSTANCE_OF_ID=Class {0} must {1} the type {2}
CLASS_MUST_BE_CONCRETE_ID=Class {0} must be concrete (not abstract)
API_DEPRECATED_AFTER_VERSION_ID=API {0} is deprecated after JSF {1}.  Use {2} instead.
BEAN_PROPERTY_NOT_FOUND_ID=Bean property {0} not found on parent class {1}
MUST_BE_A_VALID_JAVA_IDENT_ID={0} must be a valid Java identifier
BEAN_SCOPE_NOT_VALID_ID=Managed bean scope must be one of: request, session, application, none
BEAN_SCOPE_NOT_VALID_JSF2_ID=Managed bean scope must be one of: view, request, session, application, none
MAP_ENTRIES_CAN_ONLY_BE_SET_ON_MAP_TYPE_ID=Map entries can only be set on objects of type Map. {0} is not an instance of type java.util.Map
LIST_ENTRIES_CAN_ONLY_BE_SET_ON_LIST_TYPE_ID=List entries can only be set on objects of type List. {0} is not an instance of type java.util.List
API_NOT_AVAILABLE_BEFORE_VERSION_ID=API {0} is not avaiable before JSF {1}.  Use {2} instead.
APP_CONFIG_IS_NEWER_THAN_JSF_VERSION_ID=Faces 1.2 application configuration cannot be used in projects for Faces 1.1 or before
APP_CONFIG_IS_OLDER_THAN_JSF_VERSION_ID=Faces {0} application configuration being used in Faces {1} project.  Not all Faces {1} features will be available"
LOCALE_FORMAT_NOT_VALID_ID=Locale format must be of the form lang_[_country[_variant]] like en or en_US or ja_JP_SJIS
AppConfigValidationUtil_0=extend
CONFIG_FILE_NOT_UNDER_WEBCONTENT_FOLDER=JSF configuration file is not under this project's web content folder. Please check project setup.