################################################################################
##
##  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= V\u00e4ri\u00e4 ${color} ei tueta.
Descriptor.FunctionNotSupported= Funktiota ${function} ei tueta.
Descriptor.InvalidFormat= virheellinen muoto.
Descriptor.ValueNotSupported= Kohteen ${value} CSS-arvoa ei tueta.
Descriptor.UnparsableCSS= CSS:n sis\u00e4lt\u00e4mien merkkien j\u00e4sent\u00e4minen ep\u00e4onnistui.
FontFaceRule.IgnoredDescriptor= ${descriptor} ohitetaan kohdassa @font-face.
FontFaceRule.UnicodeRangeNotSupported = Unicode-aluetta ei voida m\u00e4\u00e4ritt\u00e4\u00e4 valmiiksi koostettujen SWF-kirjasimien tapauksessa.
StyleParser.DeprecatedWarning=${var} on poistettu k\u00e4yt\u00f6st\u00e4 versiosta ${since} l\u00e4htien. K\u00e4yt\u00e4 elementti\u00e4 ${replacement}.
StyleParser.StyleSheetInvalidCharset=@charset-s\u00e4\u00e4nt\u00f6 sis\u00e4lt\u00e4\u00e4 charset-koodin ${charsetName}, joka on virheellinen tai jota ei tueta. Ongelma l\u00f6ytyi tyylisivusta ${stylePath}
StyleParserErrorTranslator.UnableToParse=CSS-tiedostoa ei voi j\u00e4sent\u00e4\u00e4.
StyleParserErrorTranslator.InvalidIdentifierStartChar=CSS:st\u00e4 l\u00f6ytyi virheellinen merkki. Ymp\u00e4r\u00f6i lainausmerkeill\u00e4 fonttiperheiden nimet, esimerkiksi '_sans'.
StyleParserErrorTranslator.InvalidCSSSyntax=Virheellinen CSS-syntaksi (odottamaton ${token}).
StyleParserErrorTranslator.InvalidCSSSyntaxToken=Virheellinen CSS-syntaksi (odottamaton paikkamerkki: '${token}').
StyleParserErrorTranslator.InvalidCSSSyntaxUnits=Virheellinen CSS-syntaksi (odottamattomat ${token}-yksik\u00f6t).
StyleParserErrorTranslator.InvalidCSSSyntaxArray=Virheellinen CSS-syntaksi (odottamaton paikkamerkki: '${token}'). K\u00e4yt\u00e4 pilkkueroteltua luetteloa Array-tyypin tyylien m\u00e4\u00e4ritt\u00e4miseen.  Esimerkiksi { foo: punainen, sininen, vihre\u00e4 }.



