#
#
# Copyright (c) 2004, 2013, 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.
#

# Localizations for Level names.  For the US locale
# these are the same as the non-localized level name.

agent.err.error			   = Erro
agent.err.exception                = Exce\u00E7\u00E3o gerada pelo agente 
agent.err.warning		   = Advert\u00EAncia

agent.err.configfile.notfound      = Arquivo de configura\u00E7\u00E3o n\u00E3o encontrado
agent.err.configfile.failed        = Falha ao ler o arquivo de configura\u00E7\u00E3o
agent.err.configfile.closed.failed = Falha ao fechar o arquivo de configura\u00E7\u00E3o
agent.err.configfile.access.denied = Acesso negado ao arquivo de configura\u00E7\u00E3o

agent.err.exportaddress.failed	   = Falha na exporta\u00E7\u00E3o do endere\u00E7o do conector JMX para o buffer de instrumenta\u00E7\u00E3o

agent.err.agentclass.notfound      = Classe do agente de gerenciamento n\u00E3o encontrada
agent.err.agentclass.failed        = Falha na classe do agente de gerenciamento 
agent.err.premain.notfound         = premain(String) n\u00E3o existe na classe do agente
agent.err.agentclass.access.denied = Acesso negado a premain(String)
agent.err.invalid.agentclass       = Valor inv\u00E1lido da propriedade com.sun.management.agent.class
agent.err.invalid.state            = Estado de agente inv\u00E1lido
agent.err.invalid.jmxremote.port   = N\u00FAmero inv\u00E1lido de com.sun.management.jmxremote.port
agent.err.invalid.jmxremote.rmi.port = N\u00FAmero inv\u00E1lido do com.sun.management.jmxremote.rmi.port

agent.err.file.not.set               = Arquivo n\u00E3o especificado
agent.err.file.not.readable          = Arquivo ileg\u00EDvel
agent.err.file.read.failed           = Falha ao ler o arquivo
agent.err.file.not.found             = Arquivo n\u00E3o encontrado
agent.err.file.access.not.restricted = O acesso de leitura do arquivo deve ser limitado

agent.err.password.file.notset     = O arquivo de senha n\u00E3o est\u00E1 especificado, mas com.sun.management.jmxremote.authenticate=true
agent.err.password.file.not.readable = Arquivo de senha ileg\u00EDvel
agent.err.password.file.read.failed = Falha ao ler o arquivo de senha
agent.err.password.file.notfound   = Arquivo de senha n\u00E3o encontrado
agent.err.password.file.access.notrestricted = O acesso de leitura do arquivo de senha deve ser limitado

agent.err.access.file.notset       = O arquivo de acesso n\u00E3o est\u00E1 especificado, mas com.sun.management.jmxremote.authenticate=true
agent.err.access.file.not.readable = Arquivo de acesso ileg\u00EDvel
agent.err.access.file.read.failed  = Falha ao ler o arquivo de acesso
agent.err.access.file.notfound     = Arquivo de acesso n\u00E3o encontrado

agent.err.connector.server.io.error = Erro de comunica\u00E7\u00E3o do servidor do conector JMX

agent.err.invalid.option	   = Op\u00E7\u00E3o especificada inv\u00E1lida
agent.err.invalid.snmp.port        = N\u00FAmero inv\u00E1lido de com.sun.management.snmp.port
agent.err.invalid.snmp.trap.port   = N\u00FAmero inv\u00E1lido de com.sun.management.snmp.trap
agent.err.unknown.snmp.interface   = Interface SNMP desconhecida
agent.err.acl.file.notset          = N\u00E3o h\u00E1 um arquivo ACL SNMP especificado, mas com.sun.management.snmp.acl=true
agent.err.acl.file.notfound        = Arquivo ACL SNMP n\u00E3o encontrado
agent.err.acl.file.not.readable    = Arquivo ACL SNMP ileg\u00EDvel
agent.err.acl.file.read.failed     = Falha ao ler o arquivo ACL SNMP
agent.err.acl.file.access.notrestricted = O acesso de leitura do arquivo de senha deve ser limitado

agent.err.snmp.adaptor.start.failed = Falha ao iniciar o adaptador SNMP com endere\u00E7o
agent.err.snmp.mib.init.failed     = Falha ao inicializar o MIB SNMP com erro

jmxremote.ConnectorBootstrap.starting = Iniciando o Servidor do Conector JMX:
jmxremote.ConnectorBootstrap.noAuthentication = Sem autentica\u00E7\u00E3o
jmxremote.ConnectorBootstrap.ready = Conector JMX pronto em: {0}
jmxremote.ConnectorBootstrap.password.readonly = O acesso de leitura do arquivo de senha deve ser limitado: {0}
jmxremote.ConnectorBootstrap.file.readonly = O acesso de leitura do arquivo deve ser limitado: {0}

jmxremote.AdaptorBootstrap.getTargetList.processing = Processando ACL
jmxremote.AdaptorBootstrap.getTargetList.adding = Adicionando destino: {0}
jmxremote.AdaptorBootstrap.getTargetList.starting = Iniciando o Servidor do Adaptador:
jmxremote.AdaptorBootstrap.getTargetList.initialize1 = Adaptador pronto.
jmxremote.AdaptorBootstrap.getTargetList.initialize2 = Adaptador SNMP pronto em: {0}:{1}
jmxremote.AdaptorBootstrap.getTargetList.terminate = encerrar {0}
