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

DuplicateSymbolException=Pi\u00f9 simboli sono denominati '${symbol}'.
MultipleDefinitionsException=Il simbolo '${symbol}' \u00e8 stato definito pi\u00f9 volte in ${location1} e in ${location2}.
PartialExternsException=Collegamento incoerente in ${script}: '${external}' \u00e8 contrassegnato come esterno, mentre '${symbol}' non lo \u00e8.
CircularReferenceException=Nei prerequisiti di ${script} \u00e8 presente un riferimento circolare.
UndefinedSymbolException=${symbol}' non definito.
LinkingFailed=Sono stati riscontrati errori di collegamento irreversibili.
UnableToWriteLinkReport=Impossibile eseguire la scrittura del rapporto dei collegamenti in ${filename}.
UnableToWriteResourceBundleList=Impossibile eseguire la scrittura dell\u2019elenco dei gruppi di risorse in ${filename}.



