################################################################################
##
##  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= no se admite el color '${color}'.
Descriptor.FunctionNotSupported= no se admite la funci\u00f3n '${function}'.
Descriptor.InvalidFormat= formato no v\u00e1lido.
Descriptor.ValueNotSupported= Valor de CSS para '${value}' no admitido.
Descriptor.UnparsableCSS= No se analizaron los caracteres de CSS.
FontFaceRule.IgnoredDescriptor= ${descriptor}' se omite en @font-face.
FontFaceRule.UnicodeRangeNotSupported = no se puede especificar el intervalo unicode para fuentes SWF incorporadas.
StyleParser.DeprecatedWarning=${var}' est\u00e1 en desuso desde ${since}. Utilice '${replacement}'.
StyleParser.StyleSheetInvalidCharset=La regla @charset contiene una codificaci\u00f3n del juego de caracteres no v\u00e1lida o no admitida, ${charsetName}. Se encontr\u00f3 un problema en la hoja de estilos ${stylePath}
StyleParserErrorTranslator.UnableToParse=No se puede analizar el archivo CSS.
StyleParserErrorTranslator.InvalidIdentifierStartChar=Car\u00e1cter no v\u00e1lido encontrado en CSS. Utilice comillas para los nombres de familia de fuentes, por ejemplo '_sans'.
StyleParserErrorTranslator.InvalidCSSSyntax=Sintaxis CSS no v\u00e1lida(${token} inesperado).
StyleParserErrorTranslator.InvalidCSSSyntaxToken=Sintaxis CSS no v\u00e1lida(Token inesperado: '${token}').
StyleParserErrorTranslator.InvalidCSSSyntaxUnits=Sintaxis CSS no v\u00e1lida(Unidades de ${token} inesperadas).
StyleParserErrorTranslator.InvalidCSSSyntaxArray=Sintaxis CSS no v\u00e1lida(Token inesperado: '${token}'). Para definir estilos del tipo Array, utilice una lista delimitada por comas.  Por ejemplo, { foo: rojo, azul, verde }.



