################################################################################
##
##  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= f\u00e4rgen '${color}' st\u00f6ds inte.
Descriptor.FunctionNotSupported= funktionen '${function}' st\u00f6ds inte.
Descriptor.InvalidFormat= ogiltigt format.
Descriptor.ValueNotSupported= CSS-v\u00e4rdet f\u00f6r '${value}' st\u00f6ds inte.
Descriptor.UnparsableCSS= tecken i CSS-mallen kan inte analyseras.
FontFaceRule.IgnoredDescriptor= ${descriptor}' ignoreras i @font-face.
FontFaceRule.UnicodeRangeNotSupported = n\u00e5got unicode-intervall kan inte anges f\u00f6r f\u00e4rdigbyggda SWF-teckensnitt.
StyleParser.DeprecatedWarning=${var}' har ersatt since ${since}. Anv\u00e4nd '${replacement}'.
StyleParser.StyleSheetInvalidCharset=Regel f\u00f6r @charset inneh\u00e5ller en teckenavkodning som \u00e4r ogiltig eller som inte st\u00f6ds: ${charsetName}. Problemet uppt\u00e4cktes i formatmall ${stylePath}
StyleParserErrorTranslator.UnableToParse=Det g\u00e5r inte att tolka CSS-filen.
StyleParserErrorTranslator.InvalidIdentifierStartChar=Ogiltigt tecken p\u00e5tr\u00e4ffades i CSS. Anv\u00e4nd citattecken runt teckensnittsnamn som '_sans'.
StyleParserErrorTranslator.InvalidCSSSyntax=Ogiltig CSS-syntax (ov\u00e4ntat ${token}).
StyleParserErrorTranslator.InvalidCSSSyntaxToken=Ogiltig CSS-syntax (ov\u00e4ntad token: '${token}').
StyleParserErrorTranslator.InvalidCSSSyntaxUnits=Ogiltig CSS-syntax (ov\u00e4ntade ${token}-enheter).
StyleParserErrorTranslator.InvalidCSSSyntaxArray=Ogiltig CSS-syntax (ov\u00e4ntad token: '${token}'). Anv\u00e4nd en kommaavgr\u00e4nsad lista f\u00f6r att ange stilar av typen Array.  Till exempel { foo: red, blue, green }.



