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

Descriptor.ColorNotSupported= il colore '${color}' non \u00e8 supportato.
Descriptor.FunctionNotSupported= la funzione '${function}' non \u00e8 supportata.
Descriptor.InvalidFormat= formato non valido.
Descriptor.ValueNotSupported= Valore CSS per '${value}' non supportato.
Descriptor.UnparsableCSS= impossibile analizzare i caratteri contenuti nel file CSS.
FontFaceRule.IgnoredDescriptor= ${descriptor}' ignorato all'interno di @font-face.
FontFaceRule.UnicodeRangeNotSupported = impossibile specificare l'intervallo Unicode per i font SWF predefiniti.
StyleParser.DeprecatedWarning=${var}' \u00e8 stato contrassegnato come obsoleto a partire da ${since}. Utilizzare '${replacement}'.
StyleParser.StyleSheetInvalidCharset=La regola @charset contiene una codifica charset non valida o non supportata, ${charsetName}. Problema rilevato nel foglio di stile ${stylePath}.
StyleParserErrorTranslator.UnableToParse=Impossibile analizzare il file CSS.
StyleParserErrorTranslator.InvalidIdentifierStartChar=Carattere non valido rilevato in CSS. Racchiudere tra virgolette i nomi di famiglie di caratteri, ad esempio '_sans'.
StyleParserErrorTranslator.InvalidCSSSyntax=Sintassi CSS non valida (${token} imprevisto).
StyleParserErrorTranslator.InvalidCSSSyntaxToken=Sintassi CSS non valida (token imprevisto: '${token}').
StyleParserErrorTranslator.InvalidCSSSyntaxUnits=Sintassi CSS non valida (unit\u00e0 ${token} impreviste).
StyleParserErrorTranslator.InvalidCSSSyntaxArray=Sintassi CSS non valida (token imprevisto: '${token}'). Per impostare gli stili del tipo Array, utilizzare un elenco delimitato da virgole.  Ad esempio, { foo: red, blue, green }.



