# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.

error.convert = No puedo convertir {0} desde tipo {1} a {2}
error.compare = No puedo comparar {0} con {1}
error.function = Problemas llamando a funci\u00F3n ''{0}''
error.unreachable.base = Objetivo inalcanzable, identificador ''{0}'' resuelto a nulo
error.unreachable.property = Objetivo inalcanzable, ''{0}'' devolvi\u00F3 nulo
error.resolver.unhandled = ELResolver no manej\u00F3 el tipo\: {0} con propiedad de ''{1}''
error.resolver.unhandled.null = ELResolver no puede manejar un Objeto base nulo  con identificador de ''{0}''
error.value.literal.write = ValueExpression es un literal y no un grabable\: {0}
error.null = La expresi\u00F3n no puede ser nula
error.mixed = La expresi\u00F3n no puede contenera la vez ''\#{..}'' y ''${..}'' \: {0}
error.method = No es una MethodExpression v\u00E1lida\: {0}
error.method.nullParms = Los tipos de par\u00E1metro no pueden ser nulo
error.value.expectedType = El tipo esperado no puede ser nulo
error.syntax.set = Sit\u00E1xis ilegal para Operaci\u00F3n de Poner Valor
error.method.notfound = M\u00E9todo no hallado\: {0}.{1}({2})
error.method.ambiguous = No pude hallar m\u00E9todo ambiguo\: {0}.{1}({2})
error.fnMapper.null = La expresi\u00F3n usa funciones, pero no se ha suministrado FunctionMapper
error.fnMapper.method = Funci\u00F3n "{0}" no hallada
error.fnMapper.paramcount = La funci\u00F3n ''{0}'' especifica {1} par\u00E9metros, pero {2} fueron declarados
error.context.null = ELContext era nulo
error.identifier.notjava = El identificador [{0}] no es un identificado Java v\u00E1lido seg\u00FAn se requiere en la secci\u00F3n 1.9 de la especificaci\u00F3n EL (Identificador \:\:\= identificador de lenguaje Java). Este chequeo se puede desactivar poniendo la propiedad del sistema  org.apache.el.parser.SKIP_IDENTIFIER_CHECK a verdad (true).
