#
# Copyright 2002,2004 The Apache Software Foundation.
# 
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# 
#      http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

#########################################################################
# Conventions:
# - For error messages from particular tags, the resource should
#     - (a) have a name beginning with TAGNAME_
#     - (b) contain the name of the tag within the message
# - Generic tag messages -- i.e., those used in more than one tag --
#   should begin with TAG_
# - Errors for TagLibraryValidators should begin with TLV_
#########################################################################


#########################################################################
# Generic tag error messages
#########################################################################

TAG_NULL_ATTRIBUTE=\
    The "{0}" attribute illegally evaluated to "null" or "" in &lt;{1}&gt;

#########################################################################
# Specific tag error messages
#########################################################################

# CORE

CHOOSE_EXCLUSIVITY=\
    Only one &lt;choose&gt; subtag may evaluate its body

EXPR_BAD_VALUE=\
    In &lt;expr&gt;, attribute value="{0}" didn't evaluate successfully, \
    but there was no "default" attribute and no non-whitespace content \
    for the tag.

FOREACH_STEP_NO_RESULTSET=\
    Step cannot be > 1 when iterating over a ResultSet with &lt;forEach&gt;

FOREACH_BAD_ITEMS=\
    Don't know how to iterate over supplied "items" in &lt;forEach&gt;

IMPORT_BAD_RELATIVE=\
    In URL tags, when the "context" attribute is specified, \
    values of both "context" and "url" must start with "/".

IMPORT_REL_WITHOUT_HTTP=\
    Relative &lt;import&gt; from non-HTTP request not allowed
    
IMPORT_REL_WITHOUT_DISPATCHER=\
    Unable to get RequestDispatcher for Context: "{0}" and URL: "{1}". \
    Verify values and/or enable cross context access.

IMPORT_IO=\
    I/O error in &lt;import&gt; occurred reading "{0}"

IMPORT_ILLEGAL_STREAM=\
    Unexpected internal error during &lt;import&gt: \
    Target servlet called getWriter(), then getOutputStream()

IMPORT_ILLEGAL_WRITER=\
    Unexpected internal error during &lt;import&gt: \
    Target servlet called getOutputStream(), then getWriter()

#IMPORT_ILLEGAL_GETSTRING=\
#    Unexpected internal error during &lt;import&gt: \
#    Target servlet called neither getOutputStream() nor getWriter()

PARAM_OUTSIDE_PARENT=\
    &lt;param&gt; outside &lt;import&gt; or &lt;urlEncode&gt;

PARAM_ENCODE_BOOLEAN=\
    In &lt;param&gt;, "encode" must be "true" or "false".  Got "{0}" instead.

SET_BAD_SCOPE=\
    Invalid "scope" attribute for &lt;set&gt;:  "{0}"

SET_INVALID_PROPERTY=\
    Invalid property in &lt;set&gt;:  "{0}"

SET_INVALID_TARGET=\
    Attempt to set the property of an invalid object in &lt;set&gt;.

SET_NO_VALUE=\
    Need either non-whitespace body or "value" attribute in &lt;set&gt;

URLENCODE_NO_VALUE=\
    Need either non-whitespace body or "value" attribute in &lt;urlEncode&gt;

WHEN_OUTSIDE_CHOOSE=\
    Illegal use of &lt;when&gt;-style tag without &lt;choose&gt; as its \
    direct parent

# I18N

LOCALE_NO_LANGUAGE=\
    Missing language component in 'value' attribute in &lt;setLocale&gt; 

LOCALE_EMPTY_COUNTRY=\
    Empty country component in 'value' attribute in &lt;setLocale&gt;

PARAM_OUTSIDE_MESSAGE=\
    &lt;param&gt; outside &lt;message&gt;

MESSAGE_NO_KEY=\
    &lt;message&gt; needs 'key' attribute or non-whitespace body

FORMAT_NUMBER_INVALID_TYPE=\
    In &lt;formatNumber&gt;, invalid 'type' attribute: "{0}"

FORMAT_NUMBER_NO_VALUE=\
    &lt;formatNumber&gt; needs 'value' attribute or non-whitespace body

FORMAT_NUMBER_PARSE_ERROR=\
    In &lt;formatNumber&gt;, 'value' attribute can not be parsed into java.lang.Number: "{0}"

FORMAT_NUMBER_CURRENCY_ERROR=\
    In &lt;formatNumber&gt;, unable to set currency

PARSE_NUMBER_INVALID_TYPE=\
    In &lt;parseNumber&gt;, invalid 'type' attribute: "{0}"

PARSE_NUMBER_NO_VALUE=\
    &lt;parseNumber&gt; needs 'value' attribute or non-whitespace body

PARSE_NUMBER_NO_PARSE_LOCALE=\
    In &lt;parseNumber&gt;, a parse locale can not be established

PARSE_NUMBER_PARSE_ERROR=\
    In &lt;parseNumber&gt;, 'value' attribute can not be parsed: "{0}"

FORMAT_DATE_INVALID_TYPE=\
    In &lt;formatDate&gt;, invalid 'type' attribute: "{0}"

FORMAT_DATE_BAD_TIMEZONE=\
    In &lt;formatDate&gt;, 'timeZone' must be an instance of java.lang.String or java.util.TimeZone

FORMAT_DATE_INVALID_DATE_STYLE=\
    In &lt;formatDate&gt;, invalid 'dateStyle' attribute: "{0}"

FORMAT_DATE_INVALID_TIME_STYLE=\
    In &lt;formatDate&gt;, invalid 'timeStyle' attribute: "{0}"

PARSE_DATE_INVALID_TYPE=\
    In &lt;parseDate&gt;, invalid 'type' attribute: "{0}"

PARSE_DATE_BAD_TIMEZONE=\
    In &lt;parseDate&gt;, 'timeZone' must be an instance of java.lang.String or java.util.TimeZone

PARSE_DATE_INVALID_DATE_STYLE=\
    In &lt;parseDate&gt;, invalid 'dateStyle' attribute: "{0}"

PARSE_DATE_INVALID_TIME_STYLE=\
    In &lt;parseDate&gt;, invalid 'timeStyle' attribute: "{0}"

PARSE_DATE_NO_VALUE=\
    &lt;parseDate&gt; needs 'value' attribute or non-whitespace body

PARSE_DATE_PARSE_ERROR=\
    In &lt;parseDate&gt;, 'value' attribute can not be parsed: "{0}"

PARSE_DATE_NO_PARSE_LOCALE=\
    In &lt;parseDate&gt;, a parse locale can not be established

UNDEFINED_KEY=\
    Undefined key "{0}" in resource bundle "{1}"

MISSING_RESOURCE_BUNDLE=\
    Resource bundle with base name "{0}" not found

# SQL

DRIVER_INVALID_CLASS=\
    In &lt;driver&gt;, invalid driver class name: "{0}"

DATASOURCE_INVALID=\
    Unable to get connection, DataSource invalid: "{0}"
 
JDBC_PARAM_COUNT=\
    Invalid number of JDBC parameters specified.

PARAM_BAD_VALUE=\
    Invalid or out of bounds value specified in parameter.
 
TRANSACTION_NO_SUPPORT=\
    In &lt;transaction&gt;, datasource does not support transactions

TRANSACTION_COMMIT_ERROR=\
    In &lt;transaction&gt;, error committing transaction: "{0}"

TRANSACTION_INVALID_ISOLATION=\
    In &lt;transaction&gt;, invalid transaction isolation

NOT_SUPPORTED=\
    Not supported

ERROR_GET_CONNECTION=\
    Error getting connection: "{0}"

ERROR_NESTED_DATASOURCE=\
    It is illegal to specify a DataSource when nested within a &lt;transaction&gt;

SQL_PARAM_OUTSIDE_PARENT=\
    &lt;param&gt; or &lt;dateParam&gt; must be subtag of SQLExecutionTag actions like &lt;query&gt; or &lt;update&gt;

SQL_NO_STATEMENT=\
    No SQL statement specified

SQL_PROCESS_ERROR=\
    Error processing SQL: "{0}"

SQL_DATASOURCE_INVALID_TYPE=\
    'dataSource' is neither a String nor a javax.sql.DataSource

SQL_DATASOURCE_NULL=\
    'dataSource' is null

SQL_MAXROWS_PARSE_ERROR=\
    Error parsing 'javax.servlet.jsp.jstl.sql.maxRows' configuration setting: "{0}"

SQL_MAXROWS_INVALID=\
    'javax.servlet.jsp.jstl.sql.maxRows' configuration setting neither an Integer nor a String

SQL_DATE_PARAM_INVALID_TYPE=\
    In &lt;dateParam&gt;, invalid 'type' attribute: "{0}"

# XML

FOREACH_NOT_NODESET=\
    &lt;forEach&gt; can't iterate over XPath expressions that don't return a node-set

PARAM_NO_VALUE=\
    &lt;param&gt; needs 'value' attribute or non-whitespace body

PARAM_OUTSIDE_TRANSFORM=\
    &lt;param&gt; outside &lt;transform&gt;

PARSE_INVALID_SOURCE=\
    Unrecognized object supplied as 'xmlText' attribute to &lt;parse&gt;

PARSE_NO_SAXTRANSFORMER=\
    Filter supplied to &lt;parse&gt;, but default TransformerFactory \
    does not support SAX.

TRANSFORM_NO_TRANSFORMER=\
    &lt;transform&gt; needs either an 'xslt' attribute or a \
    'transformer' attribute

TRANSFORM_SOURCE_INVALID_LIST=\
    &lt;transform&gt; encountered an invalid java.util.List while processing 'xmlText' attribute.  This error is typically caused if you pass a node-set with more than one node to &lt;transform&gt;'s 'xmlText' attribute.

TRANSFORM_SOURCE_UNRECOGNIZED=\
    &lt;transform&gt; encountered an unknown type while processing 'xmlText' attribute

UNABLE_TO_RESOLVE_ENTITY=\
    Could not resolve entity reference: "{0}"

#########################################################################
# JSTL core TLV messages
#########################################################################

# Parameters 

TLV_PARAMETER_ERROR=\
    Invalid value for "{0}" validator parameter in TLD

# Generic errors

TLV_ILLEGAL_BODY=\
    Encountered illegal body of tag "{0}" tag, given its attributes.

TLV_MISSING_BODY=\
    A body is necessary inside the "{0}" tag, given its attributes.

TLV_ILLEGAL_CHILD_TAG=\
    Illegal child tag in "{0}:{1}" tag: "{2}" tag

TLV_ILLEGAL_TEXT_BODY=\
    Illegal text inside "{0}:{1}" tag: "{2}...".

TLV_INVALID_ATTRIBUTE=\
    Invalid "{0}" attribute in "{1}" tag: "{2}"

TLV_ILLEGAL_ORPHAN=\
    Invalid use of "{0}" tag outside legitimate parent tag

TLV_PARENT_WITHOUT_SUBTAG=\
    Illegal "{0}" without child "{1}" tag

# Errors customized to particular tags (sort of)  :-)

TLV_ILLEGAL_ORDER=\
    Illegal "{0}" after "{1}:{2}" tag in "{1}:{3}" tag.

TLV_ILLEGAL_PARAM=\
    Illegal "{0}:{1}" tag within "{0}:{2} {3}='...'" tag

TLV_DANGLING_SCOPE=\
    Illegal 'scope' attribute without 'var' in "{0}" tag.

TLV_EMPTY_VAR=\
    Empty 'var' attribute in "{0}" tag.
