################################################################################
##
##  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= a cor '${color}' n\u00e3o \u00e9 suportada.
Descriptor.FunctionNotSupported= a fun\u00e7\u00e3o '${function}' n\u00e3o \u00e9 suportada.
Descriptor.InvalidFormat= formato inv\u00e1lido.
Descriptor.ValueNotSupported= Valor CSS para '${value}' n\u00e3o suportado.
Descriptor.UnparsableCSS= caracteres em CSS n\u00e3o puderam ser analisados.
FontFaceRule.IgnoredDescriptor= ${descriptor}' \u00e9 ignorado em @font-face.
FontFaceRule.UnicodeRangeNotSupported = o intervalo unicode n\u00e3o pode ser especificado para fontes SWF preconstru\u00eddas.
StyleParser.DeprecatedWarning=${var}' est\u00e1 obsoleta desde ${since}; use '${replacement}'
StyleParser.StyleSheetInvalidCharset=A regra @charset cont\u00e9m uma codifica\u00e7\u00e3o de conjunto de caracteres inv\u00e1lida ou sem suporte, ${charsetName}. Problema encontrado na folha de estilo ${stylePath}
StyleParserErrorTranslator.UnableToParse=N\u00e3o \u00e9 poss\u00edvel analisar arquivo CSS.
StyleParserErrorTranslator.InvalidIdentifierStartChar=Caractere inv\u00e1lido encontrado em CSS. Use aspas para encerrar nomes de fam\u00edlia de fontes, como '_sans'.
StyleParserErrorTranslator.InvalidCSSSyntax=Sintaxe CSS inv\u00e1lida(${token} inesperado).
StyleParserErrorTranslator.InvalidCSSSyntaxToken=Sintaxe CSS inv\u00e1lida(token inesperado: '${token}').
StyleParserErrorTranslator.InvalidCSSSyntaxUnits=Sintaxe CSS inv\u00e1lida(unidades de ${token} inesperadas).
StyleParserErrorTranslator.InvalidCSSSyntaxArray=Sintaxe CSS inv\u00e1lida(token inesperado: '${token}'). Para definir estilos do tipo Array, use uma lista delimitada por v\u00edrgulas.  Por exemplo, { foo: vermelho, azul, verde }.



