#
# Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.  Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#

# This file stores localized messages for the Xerces
# SAX implementation.
#
# The messages are arranged in key and value tuples in a ListResourceBundle.


BadMessageKey = N\u00E3o foi poss\u00EDvel encontrar a mensagem de erro correspondente \u00E0 chave da mensagem.
FormatFailed = Ocorreu um erro interno ao formatar a mensagem a seguir:\n

# JAXP messages
schema-not-supported = O idioma do esquema especificado n\u00E3o \u00E9 suportado.
jaxp-order-not-supported = A propriedade ''{0}'' deve ser definida antes da defini\u00E7\u00E3o da propriedade ''{1}''. 
schema-already-specified = A propriedade ''{0}'' n\u00E3o pode ser definida quando um objeto do Esquema n\u00E3o nulo j\u00E1 tiver sido especificado.

# feature messages
feature-not-supported = O recurso ''{0}'' n\u00E3o \u00E9 suportado.
feature-not-recognized = O recurso ''{0}'' n\u00E3o \u00E9 reconhecido.
true-not-supported = Estado verdadeiro do recurso ''{0}'' n\u00E3o suportado.
false-not-supported = Estado falso do recurso ''{0}'' n\u00E3o suportado.
feature-read-only = O recurso ''{0}'' \u00E9 somente para leitura.
jaxp-secureprocessing-feature = FEATURE_SECURE_PROCESSING: N\u00E3o \u00E9 poss\u00EDvel definir o recurso como falso quando o gerenciador de seguran\u00E7a est\u00E1 presente.

# property messages
property-not-supported = A propriedade ''{0}'' n\u00E3o \u00E9 suportada.
property-not-recognized = A propriedade ''{0}'' n\u00E3o \u00E9 reconhecida.
property-read-only = A propriedade ''{0}'' \u00E9 somente para leitura.
property-not-parsing-supported = A propriedade ''{0}'' n\u00E3o \u00E9 suportada durante o parsing.
dom-node-read-not-supported = N\u00E3o \u00E9 poss\u00EDvel ler a propriedade do n\u00F3 de DOM. N\u00E3o existe uma \u00E1rvore de DOM.
incompatible-class = O valor especificado para a propriedade ''{0}'' n\u00E3o pode ser transmitido para ''{1}''.

start-document-not-called=A propriedade "{0}" deve ser chamada ap\u00F3s o evento startDocument ser lan\u00E7ado
nullparameter=o par\u00E2metro de nome de "{0}" \u00E9 nulo
errorHandlerNotSet=Advert\u00EAncia: A valida\u00E7\u00E3o foi ativada, mas um org.xml.sax.ErrorHandler n\u00E3o foi definido, provavelmente porque n\u00E3o era necess\u00E1rio. O parser usar\u00E1 um ErrorHandler padr\u00E3o para imprimir os primeiros {0} erros. Chame o m\u00E9todo ''setErrorHandler'' para corrigir o problema.
errorHandlerDebugMsg=Erro: URI = "{0}", Linha = "{1}", : {2} 
