# 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=Erreur interne de la VM \: M\u00e9moire insuffisante
EXEL052=Erreur interne de la VM \: Classe java/lang/String introuvable
EXEL053=Erreur interne de la VM \: Echec de la cr\u00e9ation du tableau d'octets pour le nom de classe %s
EXEL054=Erreur interne de la VM \: Echec de la cr\u00e9ation de java/lang/String pour le nom de classe %s
EXEL055=Erreur interne de la VM \: M\u00e9moire insuffisante pour la conversion de la cha\u00eene en caract\u00e8res UTF pour le nom de classe %s
EXEL056=M\u00e9thode main() non impl\u00e9ment\u00e9e dans la classe %s
EXEL057=Erreur interne de la VM \: Echec de la cr\u00e9ation du tableau d'arguments
EXEL058=Erreur interne de la VM \: \: Echec de la cr\u00e9ation du tableau d'octets pour l'argument %s
EXEL059=Erreur interne de la VM \: Echec de la cr\u00e9ation de java/lang/String pour l'argument %s
EXEL060=Erreur interne de la VM \: Echec de l'initialisation de l'\u00e9l\u00e9ment de tableau pour %s
EXEL061=Erreur de d\u00e9marrage de la VM \: M\u00e9moire insuffisante
EXEL062=Erreur interne de la VM \: Echec de la cr\u00e9ation de la VM Java

# Port
PORT001=Echec de l'allocation de m\u00e9moire.
PORT002=Erreur inconnue lors du chargement de la biblioth\u00e8que partag\u00e9e
PORT015=R\u00e9solution de r\u00e9f\u00e9rences de DLL impossible - il se peut qu'une DLL pr\u00e9requise soit manquante
PORT016=Erreur interne %i
PORT017=Echec de l'op\u00e9ration \: %d

# Zip
ZIPS000=Impossible d'ouvrir %1$s (%2$s)
ZIPS001=Impossible d'ouvrir %s (export manquant)

