# 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=Error intern de VM\: sense mem\u00f2ria
EXEL052=Error intern de VM\: no s'ha pogut trobar la classe java/lang/String
EXEL053=Error intern de VM\: no s'ha pogut crear la matrius d'octets pel nom de classe %s
EXEL054=Error intern de VM\: no s'ha pogut crear java/lang/String pel nom de classe %s
EXEL055=Error intern de VM\: sense mem\u00f2ria en convertir la cadena a UTF pel nom de classe %s
EXEL056=La classe %s no implementa main()
EXEL057=Error intern de VM\: no s'ha pogut crear la matriu d'arguments
EXEL058=Error intern de VM\: no s'ha pogut crear la matriu d'octets per l'argument %s
EXEL059=Error intern de VM\: no s'ha pogut crear java/lang/String per l'argument %s
EXEL060=Error intern de VM\: no s'ha pogut establir l'element de la matriu per %s
EXEL061=Error d'engegada de VM\: sense mem\u00f2ria
EXEL062=Error intern de VM\: no s'ha pogut crear la VM de Java

# Port
PORT001=No s'ha pogut assignar mem\u00f2ria.
PORT002=Error desconegut en carregar la biblioteca compartida
PORT015=No es pot resoldre les refer\u00e8ncies DLL - probablement manca una DLL que \u00e9s
PORT016=Error intern %i
PORT017=L'operaci\u00f3 ha fallat\: %d

# Zip
ZIPS000=No es pot obrir %1$s (%2$s)
ZIPS001=No es pot obrir %s (falta l'exportaci\u00f3)


