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

# This file stores localized messages for the Xerces JAXP Datatype API implementation.
#
# The messages are arranged in key and value tuples in a ListResourceBundle.
#
# @version $Id: DatatypeMessages_it.properties /st_wptg_1.8.0.0.0jdk/2 2013/05/27 08:14:02 gmolloy Exp $

BadMessageKey = Impossibile trovare il messaggio di errore corrispondente alla chiave di messaggio.
FormatFailed = Si \u00E8 verificato un errore interno durante la formattazione del seguente messaggio:\n

FieldCannotBeNull=Impossibile richiamare {0} con un parametro ''null''.
UnknownField={0} richiamato con un campo sconosciuto:{1}
#There are two similar keys 'InvalidXMLGreogorianCalendarValue' . Suffix (year, month) has been added and are used as per the context.
InvalidXGCValue-milli=Anno = {0}, mese = {1}, giorno = {2}, ora = {3}, minuto = {4}, secondo = {5}, frazione di secondo = {6}, fuso orario = {7} non \u00E8 una rappresentazione valida di un valore di calendario gregoriano XML.
#There are two similar keys 'InvalidXMLGreogorianCalendarValue' . Suffix (year, month) has been added and are used as per the context.
InvalidXGCValue-fractional=Anno = {0}, mese = {1}, giorno = {2}, ora = {3}, minuto = {4}, secondo = {5}, frazione di secondo = {6}, fuso orario = {7} non \u00E8 una rappresentazione valida di un valore di calendario gregoriano XML.

InvalidXGCFields=Impostato set di campi non valido per XMLGregorianCalendar

InvalidFractional=Valore {0} non valido per la frazione di secondo.

#XGC stands for XML Gregorian Calendar
InvalidXGCRepresentation="{0}" non \u00E8 una rappresentazione valida di un valore di calendario gregoriano XML.

InvalidFieldValue=Valore {0} non valido per il campo {1}.

NegativeField= Il campo {0} \u00E8 negativo

AllFieldsNull=Tutti i campi (javax.xml.datatype.DatatypeConstants.Field) sono nulli.

TooLarge=Il valore {0} "{1}" \u00E8 troppo grande per essere supportato da questa implementazione
