#
# Copyright (c) 1997, 2022 Oracle and/or its affiliates. All rights reserved.
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Distribution License v. 1.0, which is available at
# http://www.eclipse.org/org/documents/edl-v10.php.
#
# SPDX-License-Identifier: BSD-3-Clause
#



#
# don't modify nor delete anything for backward compatibility
#

# {0} - namespace uri, {1} - local name of the attribute/element e.g.: Unexpected end of attribute {http://www.w3.org/XML/1998/namespace}:lang
ContentHandlerEx.UnexpectedEnterElement = Elemento '{'{0}'}':{1} inesperado

# {0} - namespace uri, {1} - local name of the attribute/element e.g.: Unexpected end of attribute {http://www.w3.org/XML/1998/namespace}:lang
ContentHandlerEx.UnexpectedLeaveElement = Fin de elemento '{'{0}'}':{1} inesperado

# {0} - namespace uri, {1} - local name of the attribute/element e.g.: Unexpected end of attribute {http://www.w3.org/XML/1998/namespace}:lang
ContentHandlerEx.UnexpectedEnterAttribute = Atributo '{'{0}'}':{1} inesperado

# {0} - namespace uri, {1} - local name of the attribute/element e.g.: Unexpected end of attribute {http://www.w3.org/XML/1998/namespace}:lang
ContentHandlerEx.UnexpectedLeaveAttribute = Fin de atributo '{'{0}'}':{1} inesperado

ContentHandlerEx.UnexpectedText = Texto "{0}" inesperado

# Wrapped into an InternalError. e.g.: java.lang.InternalError: compiler error(unexpectedLeaveChild)
ContentHandlerEx.UnexpectedLeaveChild = error del compilador (unexpectedLeaveChild)
	
SAXUnmarshallerHandlerImpl.UnexpectedRootElement = elemento ra\u00edz {0} inesperado

# Usage not found. TODO Remove
#SAXUnmarshallerHandlerImpl.UnexpectedRootElement2 = \
#	unexpected root element (uri:"{0}", local:"{1}"). Expected elements are {2}
	
Util.UndefinedPrefix = prefijo no definido: {0}

# Not concatenated with any other string (written on a separate line).
Unmarshaller.NullReader = El lector no puede ser nulo.

# Not concatenated with any other string (written on a separate line).
Unmarshaller.IllegalReaderState = El lector debe estar en un evento START_ELEMENT, no en un evento {0}.
	
