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


keywordNotAllowed=${keyword}' non consentito
classDefinitionNotAllowed=Definizione di classe non consentita
expressionNotSupported=Espressione non supportata
functionDefinitionNotAllowed=Definizione della funzione non consentita
interfaceDefinitionNotAllowed=Definizione dell'interfaccia non consentita
labelsNotAllowed=Etichette non consentite
literalObjectsNotSupported=Oggetti letterali non supportati
nullPointerException=Impossibile accedere a una propriet\u00e0 o a un metodo di un riferimento a un oggetto null
StatementListNodeWIthMoreThanOneItem=StatementListNode con pi\u00f9 di un elemento?
typeNotExpected=Tipo non previsto
unrecognizedBinaryOperator=operatore binario non riconosciuto
unrecognizedUnaryOperator=operatore unario non riconosciuto
unsupportedExpression=Espressione non supportata
whatIsDocCommentNode=DocCommentNode non riconosciuto
whatIsMetaDataNode=MetaDataNode non riconosciuto
xmlLiteralsNotSupported=I valori letterali XML non sono supportati
binaryProgramNodeUnexpected=BinaryProgramNode non previsto
noSuchVariable = Variabile inesistente: ${arg2}
typeError = Errore di tipo
