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

###############################################################################
#
# Text for exceptions
#
###############################################################################

# Sysinfo, SysInfoWriter, and PropertyNames messages are SIF01.*
SIF01.B=Rivolgersi al servizio di assistenza tecnica.
SIF01.C=Premere <invio> per continuare
SIF01.D=Non \u00E8 stata trovata alcuna informazione sul sistema Derby.
SIF01.H=<informazioni non disponibili>
SIF01.I=Eccezione di sicurezza: {0}
SIF01.K=<nessun nome trovato>
SIF01.L=------------------ Informazioni su Java ------------------
SIF01.M=--------- Informazioni su Derby --------
SIF01.N=----------------- Informazioni sulla licenza ----------------
SIF01.P=----------------- Informazioni sulle impostazioni nazionali -----------------
SIF01.Q=Informazioni sul supporto delle impostazioni nazionali non disponibili.
SIF01.R=\u00C8 stato trovato il supporto per le impostazioni nazionali: [{0}]
SIF01.S=\t versione: {0}
SIF01.T=Impostazioni nazionali correnti:
SIF01.U=Impossibile analizzare il classpath: {0}
SIF01.V=Impossibile accedere al dominio di protezione o all''origine del codice per la classe {0}: {1}


# VM environment properties.
SIF02.A=Versione Java:    {0}
SIF02.B=Fornitore Java:     {0}
SIF02.C=Home Java:       {0}
SIF02.D=Classpath Java:  {0}
SIF02.E=Nome SO:         {0}
SIF02.F=Architettura SO: {0}
SIF02.G=Versione SO:     {0}
SIF02.H=Nome utente Java: {0}
SIF02.I=Home utente Java: {0}
SIF02.J=Dir utente Java: {0}


# ZipInfo messages are SIF03.*
SIF03.C=Eccezione di sicurezza Java: {0}

# ZipInfoProperties messages are SIF04.*
SIF04.C=<nullo>

# ClasspathTester messages are SIF08
SIF08.B=Verifica della presenza di tutte le librerie di Derby. Generalmente, ne sono richieste solo alcune.
SIF08.C=Per visualizzare la lista degli argomenti possibili, digitare {0}
SIF08.D=Trovato in classpath:
SIF08.E=Non trovato in classpath:
SIF08.F=Esito positivo: nel percorso classi sono state trovate tutte le classi di Derby.
SIF08.H=classe specificata dall''utente ({0})
SIF08.I=Libreria del server di rete Derby ({0})
SIF08.J=Libreria del modulo di gestione di Derby integrata ({0})
SIF08.L=Librerie del client Derby ({0})
SIF08.Q=Libreria degli strumenti Derby ({0})
SIF08.U=({0} non trovato).

# Translators: Please translate anyClass even though it is camel-case. Do NOT insert a space after anyClass.
SIF08.A=Uso: {0} qualsiasi classe{1}






