# 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.

# Launcher
EXEL050=java version %s
EXEL051=Erro interno da VM\: Sem mem\u00f3ria
EXEL052=Erro interno da VM\: Falha em localizar a classe java/lang/String
EXEL053=Erro interno da VM\: Falha em criar matriz de byte para o nome de classe %s
EXEL054=Erro interno da VM\: Falha em criar java/lang/String para o nome de classe %s
EXEL055=Erro interno da VM\: N\u00e3o h\u00e1 mem\u00f3ria para converter a cadeia em Caracteres UTF para nome de classe %s
EXEL056=A classe %s n\u00e3o implementa main()
EXEL057=Erro interno da VM\: Falha em criar matriz de argumento
EXEL058=Erro interno da VM\: Falha em criar matriz de byte para o argumento %s
EXEL059=Erro interno da VM\: Falha em criarjava/lang/String para o argumento %s
EXEL060=Erro interno da VM\: Falha em configurar o elemento da matriz para %s
EXEL061=Erro de inicializa\u00e7\u00e3o da VM\: Sem mem\u00f3ria
EXEL062=Erro interno da VM\: Falha em criar Java VM

# Port
PORT001=Falha em alocar mem\u00f3ria.
PORT002=Erro desconhecido ao carregar a biblioteca compartilhada
PORT015=Imposs\u00edvel resolver refer\u00eancias de DLL - pode estar faltando uma DLL de pr\u00e9-requisito
PORT016=Erro Interno %i
PORT017=Falha na Opera\u00e7\u00e3o\: %d

# Zip
ZIPS000=Imposs\u00edvel abrir %1$s (%2$s)
ZIPS001=Imposs\u00edvel abrir %s (Exporta\u00e7\u00e3o ausente)

