################################################################################
##
##  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= la couleur ${color} n'est pas prise en charge.
Descriptor.FunctionNotSupported= la fonction ${function} n'est pas prise en charge.
Descriptor.InvalidFormat= format incorrect.
Descriptor.ValueNotSupported= la valeur CSS pour ${value} n'est pas prise en charge.
Descriptor.UnparsableCSS= il est impossible d'analyser les caract\u00e8res dans CSS.
FontFaceRule.IgnoredDescriptor= ${descriptor} est ignor\u00e9 dans @font-face.
FontFaceRule.UnicodeRangeNotSupported = il est impossible de sp\u00e9cifier la plage unicode pour les polices SWF pr\u00e9d\u00e9finies.
StyleParser.DeprecatedWarning='${var}' est d\u00e9conseill\u00e9 depuis ${since}. Utilisez '${replacement}' \u00e0 la place..
StyleParser.StyleSheetInvalidCharset=La r\u00e8gle @charset contient un codage du jeu de caract\u00e8res non valide ou non pris en charge, ${charsetName}. Probl\u00e8me trouv\u00e9 dans la feuille de style ${stylePath}
StyleParserErrorTranslator.UnableToParse=Impossible d'analyser le fichier CSS.
StyleParserErrorTranslator.InvalidIdentifierStartChar=Caract\u00e8re non valide d\u00e9tect\u00e9 dans le fichier CSS. Utilisez des guillemets simples pour entourer les noms de familles de polices. Exemple\u00a0: '_sans'.
StyleParserErrorTranslator.InvalidCSSSyntax=Syntaxe CSS non valide (${token} inattendu).
StyleParserErrorTranslator.InvalidCSSSyntaxToken=Syntaxe CSS non valide (jeton inattendu\u00a0: '${token}').
StyleParserErrorTranslator.InvalidCSSSyntaxUnits=Syntaxe CSS non valide (unit\u00e9s de ${token} inattendues).
StyleParserErrorTranslator.InvalidCSSSyntaxArray=Syntaxe CSS non valide (jeton inattendu\u00a0: '${token}'). Pour d\u00e9finir des styles de type Tableau, utilisez une liste d\u00e9limit\u00e9e par des virgules.  Exemple\u00a0: { foo: red, blue, green }.



