################################################################################
##
##  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= Fargen ${color} st\u00f8ttes ikke.
Descriptor.FunctionNotSupported= Funksjonen ${function} st\u00f8ttes ikke.
Descriptor.InvalidFormat= ugyldig format.
Descriptor.ValueNotSupported= CSS-verdi for ${value} st\u00f8ttes ikke.
Descriptor.UnparsableCSS= tegn i CSS kan ikke analyseres.
FontFaceRule.IgnoredDescriptor= ${descriptor} ignoreres i @font-face.
FontFaceRule.UnicodeRangeNotSupported = unicode-omr\u00e5de kan ikke angis for forh\u00e5ndsbyggede SWF-skrifter.
StyleParser.DeprecatedWarning=${var} er avskrevet siden ${since}. Bruk ${replacement}.
StyleParser.StyleSheetInvalidCharset=@charset-regelen inneholder en tegnsettkode ${charsetName} som enten er ugyldig eller som ikke st\u00f8ttes. Problem i stilarket ${stylePath}
StyleParserErrorTranslator.UnableToParse=Kan ikke analysere CSS-fil.
StyleParserErrorTranslator.InvalidIdentifierStartChar=Fant ugyldig tegn i CSS. Bruk enkle anf\u00f8rselstegn rundt navn p\u00e5 skrifttyper, som '_sans'.
StyleParserErrorTranslator.InvalidCSSSyntax=Ugyldig CSS-syntaks (uventet ${token}).
StyleParserErrorTranslator.InvalidCSSSyntaxToken=Ugyldig CSS-syntaks (uventet spesialtegn: '${token}').
StyleParserErrorTranslator.InvalidCSSSyntaxUnits=Ugyldig CSS-syntaks (uventede ${token}-enheter).
StyleParserErrorTranslator.InvalidCSSSyntaxArray=Ugyldig CSS-syntaks (uventet spesialtegn: '${token}'). Hvis du vil angi typen Array, bruker du en kommadelt liste. Eksempel: { foo: r\u00f8d, bl\u00e5, gr\u00f8nn }



